From: "U.Nakamura" <usa@...>
Date: 2010-09-30T09:42:28+09:00
Subject: [ruby-dev:42315] [bug:trunk] ビジースレッドがあるとコンテキストスイッチが起きづらくなる

こんにちは、なかむら(う)です。
とりあえずチケット化するために全文引用します。
遅いのはfeatureかbugか... bugでいいか。

ちなみに
  ruby 1.9.3dev (2010-09-30 trunk 29375) [i386-mswin32]
では再現していません。
x64版固有とかCPUコア数とかと関係するとかですかね。

In message "[ruby-dev:42310] ビジースレッドがあるとコンテキストスイッチが起きづらくなる"
    on Sep.29,2010 21:16:52, <beuniv@gmail.com> wrote:
> こんにちは。
> ビジー状態のスレッドがあると中々他のスレッドに処理が戻らず実行速度が遅くなることがあります。
> 環境は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


それでは。
-- 
U.Nakamura <usa@garbagecollect.jp>