[#697] ++[Re: dylan [Re: swap values(Re: call by reference)]] —
けいじゅ@SHLジャパンです.
1 message
1996/10/01
[#869] Append Member — Kouki Higuchi <luke@...>
Please let me be a participate.
1 message
1996/10/20
[#895] sleep eternaly on BOW(Re: ruby 0.99.2-961023 available) — Shin-ichiro Hara <sinara@...>
原です。
6 messages
1996/10/24
[#906] [REQ]Get Strings!<3> GETS, SUB — Shin-ichiro Hara <sinara@...>
原です。
5 messages
1996/10/27
[#907] [REQ]Get Strings!<4> SPLIT — Shin-ichiro Hara <sinara@...>
原です。
6 messages
1996/10/27
[#920] bug report(each) — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
8 messages
1996/10/29
[#928] Re: hajimemashite — Itsuro Saito <saito@...>
斎藤@東大電子情報です.
9 messages
1996/10/29
[#938] ruby 0.99.3-961030 available — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです.
7 messages
1996/10/30
[#954] Rational — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
23 messages
1996/10/30
[#955] Re: Rational
— matz@... (Yukihiro Matsumoto)
1996/10/30
まつもと ゆきひろです.
[#968] Re: Rational
—
1996/10/31
けいじゅ@SHLジャパンです.
[#970] Re: Rational
— matz@... (Yukihiro Matsumoto)
1996/10/31
まつもと ゆきひろです.
[#956] Re: Rational[coerce(Re: ruby 0.99.3-961030 available) ] — Shin-ichiro Hara <sinara@...>
原です。
4 messages
1996/10/30
[#965] ruby-mode — Yasuo OHBA <jammy@...>
大庭@SHLJapanです.
6 messages
1996/10/31
[ruby-list:774] Re: mech. of Thread (Re: httpd.rb)
From:
matz@... (Yukihiro Matsumoto)
Date:
1996-10-07 08:48:31 UTC
List:
ruby-list #774
In message "[ruby-list:773] Re: mech. of Thread (Re: httpd.rb)"
on 96/10/07, Shin-ichiro Hara <sinara@blade.nagaokaut.ac.jp> writes:
|> thread切替えはsetitimerのあるOSではそれを使って約50msec毎に
|> 行っています.そうでないOSではインタプリタが500ステップ実行
|> する毎に切替えています.
|
|分かりました。後者では、あるスレッドでインタプリタが入力待ちな
|どでブロックしてしまった場合、全体が止まってしまうことになるの
|かしら?
これはどっちでもそうです.rubyは実は疑似的なpreemptiveで,時
間で割込みが来てもフラグを立てるだけで実際のコンテキスト切替
えはインタプリタが安全な時に行います.ですから,前者でもブロッ
クされちゃったらそれまでです.
setitimerを使っているかどうかの違いは
* 使っている方が正確な時間で切り替わる
* 使っている方がほんの少し軽い(らしい)
くらいです.
なぜ前者でも割込みで切替えないかというと,ruby全体をthread
safeにするコストが現実的でなかったからです.別のアプローチと
しては危険な部分で切替えをブロックというものがありますが
(Guileはこっち),extensionの書きやすさから,今の方を採用して
います.
ですが,rubyから使っている範囲内ではそのような問題は起きない
はずです.ブロックする可能性のあるメソッドはブロックしそうな
場合に他のthreadに制御権を引き渡すようになっています.
Socket#acceptはそれを忘れていたわけです.
問題のあるのはextensionでしょうね.拡張モジュールを書く時に
はブロックしたり,busy waitしたり,無限ループに落ちたりしな
いように気をつけてくださいね.
|ああ、知りたかったのはこれです。ensure は Thread.kill でも有効なの
|か!
原則: ensureはexit!(とBug()の呼出)を除くあらゆる場合に呼ばれ
るはずです.呼ばれなければそれはバグです.
まつもと ゆきひろ /:|)