永井@知能.九工大です.

忙しくて暫く放置していて,今日,久しぶりに動かしてみたのですが,
今の 1.9 って,Thread 切替えがものすごく遅くなっていたりしますか?

ruby 1.9.2dev (2009-09-19) [i686-linux] で試していたのですが,
次のスクリプト (1) であれば,1.8 と同様にすぐにウィンドウが出ます.
-----(1)-----------------------------------------------------
module TkCore; RUN_EVENTLOOP_ON_MAIN_THREAD = true; end
require "tk"
TkButton.new(:text => 'hello',:command => proc{puts "hello"}).pack(:fill=>'x')
TkButton.new(:text => 'quit',:command => proc{exit}).pack(:fill=>'x')
Tk.mainloop
-------------------------------------------------------------

ですが,
-----(2)-----------------------------------------------------
require "tk"
TkButton.new(:text => 'hello',:command => proc{puts "hello"}).pack(:fill=>'x')
TkButton.new(:text => 'quit',:command => proc{exit}).pack(:fill=>'x')
Tk.mainloop
-------------------------------------------------------------
や
-----(3)-----------------------------------------------------
module TkCore; RUN_EVENTLOOP_ON_MAIN_THREAD = true; end
require "tk"
Thread.new{
TkButton.new(:text => 'hello',:command => proc{puts "hello"}).pack(:fill=>'x')
TkButton.new(:text => 'quit',:command => proc{exit}).pack(:fill=>'x')
}
Tk.mainloop
-------------------------------------------------------------
ではとんでもなく遅くなってしまいます.

こんな短いものでも差が分かるくらいですので,
もっと大きなスクリプトでは秒と分というレベルでの差になっています.

原因の心当たりや回避策などありましたら,教えていただけますと幸いです.
-- 
永井 秀利  (nagai / ai.kyutech.ac.jp)
九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門