けいじゅ@SHLジャパンです. In [ruby-list :00611 ] the message: "[ruby-list:611] Re: platforms (Re: NSUG ruby shoukai) ", on Sep/26 21:03(JST) Shin-ichiro Hara <sinara / blade.nagaokaut.ac.jp> writes: >> ぼくのところでは、スレッド関連がおかしいような気がします。 >> 特定のスレッドの優先順位が高いままで、他のスレッドに制御が移 >> らない・・・という感じです。 >私の所の linux でもそんなかんじです。 私のところも何かおかしいみたいです. 下記のプログラムで検証しました. --thread2.rb $stdout.sync = 1 $, = ", " $\ = "\n" $i = 0 $j = 0 Thread.start do loop do $i += 1 end end Thread.start do loop do $j += 1 end end ooi = 0 ooj = 0 loop do sleep 1; #1000.times {Thread.pass} oi = $i oj = $j print oi, oi - ooi, oj, oj - ooj, oi - oj ooi = oi ooj = oj end -- 結果は: 24159, 24159, 181, 181, 23978 24338, 179, 359, 178, 23979 24507, 169, 529, 170, 23978 24670, 163, 691, 162, 23979 24839, 169, 860, 169, 23979 25012, 173, 1033, 173, 23979 (中略) 192216, 171, 168115, 171, 24101 192389, 173, 168288, 173, 24101 192562, 分かったことは, 1. 最初のスレッドは次のスレッドが走りはじめるまでかなり走るるらしい. 2. 2つめのスレッドが走りはじめてからは, 大体平均的になっている 3. 最後には出力が止まってしまった(;_; ということです. 1.に関してもある程度はしょうがないなと思いますが, 変だといえば変です. 1かいめと2かいめの結果. 24159, 24159, 181, 181, 23978 24338, 179, 359, 178, 23979 を見ると, 1回目の結果が出るのはスレッドを立ちあげてすぐです. 2度目は約 1秒後です. 何で thread1がこんなに優先されるのでしょう?? 2. 2つともちゃんと立ち上がれば平均的になっているようです. ただ, スイッチ のコストが非常に高いような気がします. 1秒間に177回ですから... と思った のですが. sleepだとそのスレッドだけでなくプロセス全体がsleepしちゃうん ですよね?? 3. これは問題でしょう. 私のマシン(linux)では, 落ちたりはしないのですが,何 も出力されなくなってしまいます. 原さんの thread.rb でも同じ現象になり ました. PS. やはり iterator do ... end は気分が良いですね(^^;; th1 = Thread.new do ... end は構文エラーになりますが, do..endの代入は許さないということですか? __ ..........................................石塚 圭樹@SHLジャパン(株)... ------------->アドレス変わりました!! e-mail: keiju / shljapan.co.jp <----