Javaで何も考えずにBufferedWriterに同時書き込みを行う場合と、キューイングして別スレッドで書き出す場合の性能比較をしてみた。ある文字列を1スレッド辺り1000回書き出してみる。JDKは1.5.0_06。
スレッド数, 100, 200, 300, 400, 500
キューイング[ms], 1828, 2735, 4842 ,6562, 8297
単純書き込み[ms], 2641, 6828, 10453, 11141, 12453
思ったよりも、キューイングした方が速いなぁ。
これはすなわち、ロックの大きさの差かな。BufferedWriterも自分で作ったキューイングも、どちらもsynchronizedブロックがあるのだが、キューイングの方がメモリ上のキューにObjectを積むだけなので、すぐにロックを解放できる。
最近ロックと闘う事が多いので、基礎データとして何かに使えるかな。