[ruby-list:618] thread [Re: platforms (Re: NSUG ruby shoukai)]

From:
Date: 1996-09-26 13:43:51 UTC
List: ruby-list #618
けいじゅ@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 <----

In This Thread

Prev Next