From: kuwamoto shintaro Date: 2010-09-29T21:16:52+09:00 Subject: [ruby-dev:42310] ビジースレッドがあるとコンテキストスイッチが起きづらくなる こんにちは。 ビジー状態のスレッドがあると中々他のスレッドに処理が戻らず実行速度が遅くなることがあります。 環境はruby 1.9.3dev (2010-09-29 trunk 29361) [x64-mswin64_90]です。 以下のスクリプトを実行すると終了するまでに時間がかかります。 t = Time.now n = 0 Thread.new{loop {n+=1} } Thread.new{}.join p [n, Time.now - t] .\ruby.exe a.rb [82741230, 10.6304] 追ってみたところnative_sleepのGVL_UNLOCK_ENDで、mainスレッドが GVLを取得できずに止まっている時間が長いようです。 ためしにCriticalSectionではなく、USE_WIN32_MUTEXで、Mutexを使うように変更するとすぐ終わるようになりました。 MutexLock版 .\ruby.exe a.rb [65482, 0.017] ruby/test_threads.rb:test_listが結構な割合で失敗するので気がつきました。 -- kuwamoto