Bug #270
lazy timer thraed creation
| Status: | Closed | Start date: | ||
|---|---|---|---|---|
| Priority: | Low | Due date: | ||
| Assignee: | % Done: | 0% |
||
| Category: | - | |||
| Target version: | 2.0.0 | |||
| ruby -v: | ruby 1.8.8dev (2010-01-17 revision 26335) [i386-netbsdelf5.0.1] |
Description
ささだです. 現在,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
Related issues
History
Updated by ko1 (Koichi Sasada) almost 4 years ago
- Assignee set to ko1 (Koichi Sasada)
Updated by yugui (Yuki Sonoda) over 3 years ago
- Target version set to 2.0.0
Updated by naruse (Yui NARUSE) over 2 years ago
- Status changed from Open to Closed
- ruby -v set to ruby 1.8.8dev (2010-01-17 revision 26335) [i386-netbsdelf5.0.1]
本件ですが、まず FreeBSD 7.2 あたり、NetBSD 5.0 あたりで OS 側に対処が入り、 pthread を使った後で fork しても刺さらないようになったようです。 (誰かコミットの特定よろしく) また、関連する #2603 r26371 から得られた知見を追記すると、 01:04 (unak) 今日のまとめ 01:05 (unak) NetBSDのpthread_atfork()やばい 01:05 (unak) というか、pthread_atfork()の中でpthread_create()しちゃいけないんだろうね。 01:06 (unak) ああ、もう一個あった。 01:07 (unak) NetBSDだとfork()前に余分なスレッドを殺しておくのが吉... ... ... 01:44 (unak) parent handerでpthread_create()が呼ぶと刺さるのはなんか変なので、これはOS側で対応してほしいね。 ということになるようです。
Updated by usa (Usaku NAKAMURA) over 2 years ago
こんにちは、なかむら(う)です。 In message "[ruby-dev:40127] Re: [Bug #270](Closed) lazy timer thraed creation" on Jan.22,2010 08:54:15, <kosaki.motohiro@jp.fujitsu.com> wrote: > 僕の知見は > > pthread_atfork(0, 0, rb_thread_stop_timer); はダメな子 > > につきるような。この子が意味があるプラットフォーム、あるんだろうか・・・ ですよねー。 子プロセス側ではtimer threadは死んでるに決まってるんだし... それでは。 -- U.Nakamura <usa@garbagecollect.jp>