Concurrency
Concurrent ML の ivar in OCaml, Concurrent Cell: http://d.hatena.ne.jp/osiire/20081011
ウチでも同じようなことをしております(が、クローズドなので)。なのでこれには注目していきたい!
OCaml で multi thread なプログラムを書くと、初めのころは、大抵、
Thread.create! 媚びろ〜!! 媚びろ〜!! 俺は天才だ ファハハハ!!
な感じで初期アミバ様状態なのですが、油断していると、というか、大体すでに CAMLC=ocamlc -thread としている時点でアミバ的に油断しているのですが、
お前(のプログラム)はもう死んでいる。もう1000行書いてみろ
心配するな おれは天才だ おれに不可能はない!! Mutex.lock!
Segmentation fault
うわっ うわああ うわらば
ということになります。どんなに天才アミバ様でも、どっかで mutable operation を lock 掛けずにやってしまうので、まずうまくいきません。じゃあってことで至る所 mutex で守っても、dead lock したり、天才どころか醜くなるだけで相変わらず seg fault。プロジェクト終了。Ha,Haskell なら(副作用ないから)、よかったのか?ML終了の予感?
というのが私の ocamlc -thread に対する印象だったんだけど、CML 風にいろいろ書いてやると、
あ、あれ?Thread.create、Mutex.lockなんか一つも書かない(まあ、内部ではやってるわけだけど)のに平行に計算するよ! なんか monadic に綺麗に書けるよ! 無駄に thread 作らなくても concurrent になってるので、副作用バリバリでも Seg fault しないよ! あ、なんか体が軽い!光が見える!自由だー!(エクスタシーによる臨死体験)
というわけです。
大体 -thread 使うときって、ほんとにほしいのは手軽で安全な concurrency であって、ガチで multi thread がほしいって訳じゃないんですよね。
でも、実は内部が良くわかってないので、
- 作者: John H. Reppy
- 出版社/メーカー: Cambridge University Press
- 発売日: 2008/08/21
- メディア: ペーパーバック
- クリック: 2回
- この商品を含むブログ (1件) を見る