昨日、Ruby のスレッド化について少し読んで (この記事のように)、一般的に理解したのは、(JRuby のようないくつかの実装を除いて) いわゆるグローバル インタープリター ロックがあり、そのために実行できないということでした。一度に複数の CPU で ruby コードを実行できます。私は少しテストを行いました (私は AMD Turion II デュアルコア モバイル M500 プロセッサを持っていて、ubuntu 11.04、+rvm を実行しています)、このコードでこれが動作していることを確認しました:
threads = []
CPU = 2
CPU.times do
threads << Thread.new {
x=0
time=Time.new
while 1 do
if Time.new - time >= 30 then
break
else
x=1.00/24000000000.001
end
end
}
end
threads.each { |t| t.join }
puts "done"
そして、システムモニターのスクリーンショットを撮りました。
REE と 1.9.2 は一度に 1 つのコアを使用しているようですが、1.9.3 は両方を使用しているようです。
これは本当に可能ですか (より多くのコアを使用しても?)、それとも何かが足りないだけで、テストが間違っていますか?