きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

スレッドプログラミングしてみた

大したものではない。
親スレッド1つに対して、
子スレッド5つの構成で、
親スレッドを9つ作って動かす。


親スレッドは、自身が動かす子スレッドをjoin待ち。
各子スレッドは30MBのファイルをひたすらreadLine。
はっきり言って意味のあるコードじゃない。


そもそも6年半前に買ったパソコンなんで、当然1コアです。
親スレッドの数を変えても、所要時間はリニアに変化するだけ。


親が9つの時、平均的な親スレッドの終了時間は、60数秒程度。
親が1つの時、7.3秒。


CPUの割当が、確率論になっちゃうんで、各スレッドの開始と終了だけをみると、遅くなってるけど、各スレッドがチビチビと進むのは避けられないんじゃないのかな。


まあ、これはある意味では、APサーバーのスレッドプールを増やして多めにさばこうとすると、各リクエストは遅くなるってことじゃないのかな、と今ごろになって気付いてみた。


結果から言うと、僕の調べたかったことはアテが外れたかもしれない。


commonjのwaitForAllは確かjoinによる実装だと書いてあるのをどこかで見た気がしたので、
join絡みで、大量のスレッドが使われてると、使途不明な待機(joinによる待ちは想定内)が発生してないかを考えていた。


なんでCPU使用率が中途半端なところで頭打ちになったのか分からん。