Gauche > Archives > 2017/01/20

2017/01/20 18:48:12 UTCshiro
#
Channels in Common Lisp http://vicsydev.blogspot.com/2017/01/channels-in-common-lisp.html チャネルを使った同期は綺麗で、Gaucheでも<mtqueue>推奨なんだけど、CSPの実装に当たってちょっとまだ理解してないのが障害対応の落としどころで
2017/01/20 18:53:38 UTCshiro
#
プロセスネットワークが実行時にどっかでつっかえた時に、どのレイヤでそれを検知してどのレイヤで対応するのが綺麗なんだろう。Erlangは割り切っててネットワークのどっかが予想外に死んだら全部ご破算でやり直しって感じだよね。Goはどうしてるのかな。
2017/01/20 18:59:59 UTCshiro
#
Gaucheのmtqueueでは一応、enqueue側もdequeue側もタイムアウトを設定できるようにして、必要なら各スレッドレベルで異常検知して対応できるようにはしたけど、結構面倒。とはいえ、監視スレッド使ったとしても、監視スレッドが異常検知した後、つっかえてるスレッド群をどうするかという問題は残る(非同期にシグナルを送るのはそれはそれでめんどい)
2017/01/20 19:04:36 UTCshiro
#
非同期シグナルを受けたらできるだけクリーンアップしてスレッド終了、というふうに決めてしまえばシンプルだけど、スレッドプールで使ってたりする場合殺したいのはスレッド自身でなくジョブだし。そう考えると言語レベルで見せるCSPのプロセスはやっぱりlightweightでぽんぽん作って殺せるようにして、実行メカニズムとしてのOSレベルスレッドとは分離しておくのが正解なのかなあ。