From: SASADA Koichi Date: 2008-07-14T10:18:43+09:00 Subject: [ruby-dev:35471] [Bug: 1.9] lazy timer thraed creation  ささだです.  現在,1.9 では timer thread というものを起動時に作って,以下の用途 に利用しています. a) スレッドスイッチの契機 b) signal の集約 c) sampling profiling  (a) は SIGVTALRM の代わりに,select で polling して,定期的に ruby threads に対してスレッド切り替えを促します.  (b) は,一度 signal を timer thread に集約して,その後 ruby thread に signal の情報を渡すように実装しています.  (c) は,あまり活用されていませんが,sampling profiler として利用す ることができます.今後の拡張用です.  ただ,最近のFreeBSDやNetBSDは,一度 pthread を作ると,後始末をして も fork 後,pthread を作ろうとすると刺さるので,必ず timer thread を 作る 1.9 では fork が出来ません.そこで,最初に Thread.new するま で,つまり,マルチスレッド実行を行うまで timer thread の遅延を遅らせ るような提案を受けています.  (b) に関しては実装についてケアが必要で(これまで,ruby thread で signal を受ける心配をする必要がなかった),(c) についてはあきらめな ければなりませんが,FreeBSD, NetBSD などの広く利用されている OS で fork が動かないのはまずかろう,という意見です.  fork をこれ以上使うな,という意見もあるかとは思いますが,この提案 については前向きに検討していきます.  忘れないように redmine に登録しておきます.  ご意見募集中です. -- // SASADA Koichi at atdot dot net