土岐です。
スレッド中で IO::select を使うと、入力待ちの間 ruby の CPU の負荷が異
常に高くなります。
ruby -ve 'Thread.new{ IO::select([STDIN], [], []) }; sleep'
ruby 1.2.5(99/04/13) [i386-freebsd3.1]
このようなスクリプトを走らせると、
PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND
26986 toki 93 0 1588K 1160K RUN 2:28 94.36% 94.34% ruby
224 root 30 0 57724K 20824K RUN 7:47 1.22% 1.22% XF86_SVGA.xtt
1262 toki 10 0 1756K 952K nanslp 1:45 0.63% 0.63% xosview
415 toki 2 0 10240K 8372K select 1:28 0.00% 0.00% mule
26873 toki 2 0 18896K 12596K select 0:33 0.00% 0.00% communicator-4
こんな具合に CPU の負荷がほとんど ruby に消費されてしまいます。どうや
らスレッドの切り替えが連続して空ループが回転しているのと同じ状態になっ
てるみたいです。
----------------------------------------------------------------------------
土岐 仁謙 神戸大学物理高エネ研 M2
URL: http://www3.phys.sci.kobe-u.ac.jp/~toki/index.html
PGP fingerprint = D0 A8 90 AB 73 F8 34 FE CE CA DB BF 01 30 C0 35