2006-02-26 [長年日記]

[Java] 複数のスレッドからのファイル書き込み

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を積むだけなので、すぐにロックを解放できる。

最近ロックと闘う事が多いので、基礎データとして何かに使えるかな。

[Java] ↑ちょっと違った

ロックの大きさの差というよりは、ロックを獲得したいスレッドの数による影響みたい。キューを2本使って入れ替える実装にしていたので、ロックあたりのスレッド数が減っていた(^^;

BufferedWriterは当然ながら、そんなに時間はかからないので。訂正。


«前の日記(2006-02-21) 最新 次の日記(2006-03-05)»