[続きと訂正]python で file.writeで書き込むのと、os.writeで書き込むのってどう違うの?

前回の話を社内でちゃんとプログラミングが分かる人(私、わからない人。)に聞いてみたら、おま、何言ってんねん、と言われたので訂正。

社員A:「サイズは1だけど、fwriteは内部でちゃんとやってるよ。」

size_t fwrite(buf, size, count, fp)
...
	uio.uio_resid = iov.iov_len = n = count * size;
...
	if (__sfvwrite(fp, &uio) != 0)

「でも、__sfvwrite()が書き込む buffer-sized chunksのデフォルトは1KBなので、遅いっちゃ遅いけど、
そんなに差が出るのは変だね−。Cで同じコード書くとほとんど差がでないし。

あと、file.write()は小さいwrite I/Oをひとつのsyscallにまとめてくれるから、細かい書き込みならfile.writeのほうが速いと思うよ。」

とのことで、僕のしょぼさが露呈したのでした。親切な同僚がいると捗るな−。

で、ためしにpythonで書き込みサイズを1KBにしてやってみると、file.write()のほうが7倍速かった。(sync書き込みの場合)

結論としては、細かいI/Oの場合はfile.writeのほうがよくて、どかんと大きなデータを書くときはos.writeを使う、と。面倒だね−。最適値を勝手に選んで使ってくれればいいのに。(って、それは難しいわけだけど。)