最近Rubyでクローラを書いた。 なかなか気合いの入った動きをみせ、一晩で3Gバイトものデータをダウンロードしてくる。 また、それに比例して処理も遅くなる為、Threadを使うことにした。 RubyでのThreadはグリーンスレッド、つまり1つのカーネルスレッドに対して複数のユーザースレッドが動作している為、並行的には動作できるが、並列には動かない。つまり速くならない。 しかしクローラのようにボトルネックがネットワークとディスクIOの場合、待ち時間に他の処理ができるのでそこそこ有用です。 問題としてRubyのThreadはとにかく遅い。コストが高すぎ。スイッチング遅すぎ。 本来は (1..10000).map { |e| Thread.start { e**2 } }.map{ |th| th.value } みたいにThreadを使い捨てにしたい。楽だし。 でもリソースがもったいなさ過ぎ