Parallel and Concurrent Programming in Haskell 読書会 第5回

2013/Oct/14に開催された"Parallel and Concurrent Programming in Haskell" (by Simon Marlow) の読書会第5回についての呟きをまとめました。今回は、並行プログラミングにおける非同期・同期例外の取り扱いと、STMモナドの話。STM超便利。さくっと把握したい向きは最後の井上さんによるまとめを読みましょう。
5
前へ 1 2 ・・ 6 次へ
Jun Inoue @jun0inoue

#PCPjH いや、始まる前に会場で雑談してるだけか。

2013-10-14 15:40:16
shige @takeishg

#PCPjH たなかさん待ちっす、お待ちくださいー

2013-10-14 15:40:50
Jun Inoue @jun0inoue

今回の #PCPjH では飯テロはできなさそうだ。

2013-10-14 15:48:22
コスモ @cosmo__

String -> ByteStringだとエンコード情報が壊れるのでString -> Text -> ByteStringと変換していくといいらしい #PCPjH

2013-10-14 15:53:12
shelarcy(しぇらーしぃ) @shelarcy

lockfree なデータ構造を実装するために、atomic-primops パッケージで提供されている primitive [http://t.co/nQoLtYNEZq ] が HEAD に追加されたよというお話 http://t.co/q5gVxRdgHE #PCPjH

2013-10-14 16:21:14
shelarcy(しぇらーしぃ) @shelarcy

Parallel and Concurrent Programming in Haskell 読書会 #5 開始にゃう♬☆ミ 今日は Chapter9. Cancellation and Timeouts より #PCPjH

2013-10-14 16:40:38
Jun Inoue @jun0inoue

#PCPjH スレを中止するプロトコル二つ。(1)中止されるスレが中止条件のフラグを定期的に調べて自分で止まる。十分頻繁に調べるの忘れると死。(2)強制的に殺す。クリティカルセクション内で殺してしまうと死。 命令形では (1) しか考えられん。Haskell では(2)がデフォ。

2013-10-14 16:49:50
Jun Inoue @jun0inoue

#PCPjH 同期的例外 = 例外で中断されるスレ自身が起こした例外 非同期的例外 = 例外で中断されるスレ自身が起こすとは限らない例外

2013-10-14 16:51:19
Jun Inoue @jun0inoue

#PCPjH throwTo :: ThreadId -> e -> IO () で例外 (e) を別スレッドに向けて放れる。

2013-10-14 16:53:25
Jun Inoue @jun0inoue

#PCPjH mask :: ((IO a -> IO a) -> IO b) -> IO b CPSェ…

2013-10-14 17:01:40
Jun Inoue @jun0inoue

#PCPjH block/unblock は mask/restore に変わりました。

2013-10-14 17:02:43
Jun Inoue @jun0inoue

#PCPjH mask は quasiquote、restore は unquote みたいなもん (ネストは多分1レベルしか無理)。"quote" はこの場合「例外がマスクされる」、"unquote" は「例外マスクを一時的にやめる」

2013-10-14 17:04:55
Jun Inoue @jun0inoue

#PCPjH mask は例外を消化するのではなく遅延するだけなので POSIX signal より良心的。

2013-10-14 17:07:00
Jun Inoue @jun0inoue

#PCPjH interruptible op むっちゃややこしい

2013-10-14 17:12:03
Jun Inoue @jun0inoue

#PCPjH takeMVar は mask してても例外で中断させられうる。しかし takeMVar が返ってから次の処理を始めるまでは例外がマスクされる。

2013-10-14 17:14:08
Jun Inoue @jun0inoue

#PCPjH 複数の MVar に対して take+take →処理→ put+put するとうまく行かんよなあこれ…

2013-10-14 17:15:25
Jun Inoue @jun0inoue

#PCPjH take →処理→ put の流れは頻出なので mask でわざわざ実装しなくても modifyMVar_ として提供されてる。これを使って compare-and-swap 等が自明な方法で実装できる。

2013-10-14 17:19:36
Jun Inoue @jun0inoue

#PCPjH 二つのMVarを変更する時は modifyMVar x $ \xval -> modifyMVar y $ \yval -> ... とする。内側の modi(ry は外側の mo(ry の restore 内で実行される。内側のが失敗すると外側のはxの値を戻す。

2013-10-14 17:22:57
Jun Inoue @jun0inoue

#PCPjH bracket a b c は dynamic-unwind みたいなもんで、a が実行し終われば c が実行されることを約束する。但し a が実行し終わる前に例外が飛べば c は実行されない。a は中断可能オペを一個までしか実行してはいけない。

2013-10-14 17:27:30
Jun Inoue @jun0inoue

#PCPjH c で中断可能オペを使うと c が最後まで走らないかも知れないので注意。

2013-10-14 17:28:18
shelarcy(しぇらーしぃ) @shelarcy

mask 関数の実装ってどんな感じでしたっけ?……というわけで #miteru http://t.co/TiHHzxAJ6b http://t.co/PJ6sopSJSR #PCPjH

2013-10-14 17:31:06
前へ 1 2 ・・ 6 次へ