From: SASADA Koichi Date: 2012-06-25T19:39:10+09:00 Subject: [ruby-dev:45819] Re: 非同期割り込みに対する対処案(日本語版)  ささだです.  早速,ありがとうございます.ただ,質問の仕方が悪かったので,質問だけ並 べてみました. (2012/06/25 19:05), Tanaka Akira wrote: >> > あと,delay_interrupt ってなんだっけ? > 覚えたませんでしたが、読み直すと、ブロッキング操作以外の (任意の) 場所について > 割り込みを例外として発生させてよいかを制御するメソッドですね。 > > ブロックの中は遅延させるという意図です。  というわけで,わかりづらかったので,田中さん宛の疑問を列挙します. (1) 結局,デフォルトの挙動はどうするべきか? (2) Thread.delay_interrupt を呼ぶ前と,呼んだ後のブロックの中ではどのよ うに挙動は変化するか? (3) Thread.blocking_interruptible() を呼ぶ前と,呼んだ後のブロックの中で はどのように挙動は変化するか? (4) Thread.blocking_uninterruptible() を呼ぶ前と,呼んだ後のブロックの中 ではどのように挙動は変化するか? 私の推測・意見です: (1) については特に規定していない気がします.間違ってたらすみません. (2) は,上記の説明とメソッド名からどっちがどっちだかわかりませんでした. (3) は モード1, 2 -> モード2 への制御を行う? (4) は モード0, 1 -> モード2 への制御を行う? (3, 4) があれば, (2) は不要じゃないか?  あと,よくよく考えると,Thread.blocking_uninterruptible などで,klass の指定が n 個ネストすると,非同期割り込みが起こる度に n 回チェックする必 要がある気がします.包含関係があるので,単純にそうではないんですが.継承 関係を考えると,ハッシュで O(1),というわけにもいかない(飛んできた例外 オブジェクトの継承木の高さが m 個の場合,O(m) でいけるか).  また,[ruby-talk:294917] ではキューで管理するべき,ということでした が,種類によって割り込みが追い越す可能性があります(例えば,TimeoutError がブロックされており,キューに貯まっているとき,InterruptError が来たら どうなるか).  この2点について,考えをお聞かせ下さい. (5) チェックのコストをどう考えるか(O(m) は甘受すべきコストか) (6) 追い越しが発生するとき,どうすると良いか  もし,議論を見逃していたらすみません.追い越しの件は,なんか以前聞いた ことがあるような気がしたのですが,忘れてしまいました.  あと,[ruby-talk:294917] では "It is because Thread.check_interrupt with blocking operations causes race conditions." と,race が起こるとか いてあるんですが,これどういう話でしたっけ. -- // SASADA Koichi at atdot dot net