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

2013/Oct/27に開催された"Parallel and Concurrent Programming in Haskell" (by Simon Marlow) の読書会第6回についての呟きをまとめました。"STMでもまだ弱い!抽象化だ!もっと抽象化したAPIを!" さくっと把握したい向きは最後の井上さんによるまとめを読みましょう。
1
前へ 1 2 ・・ 5 次へ
Jun Inoue @jun0inoue

#PCPjH 前回のおさらい: STM でブロックするのは全部 retry の仕業

2013-10-27 16:06:21
Jun Inoue @jun0inoue

#PCPjH waitBoth を waitEither に変えれば「二つアクション走らせて両方返す」関数が「二つアクション走らせて早いほう返す(遅いほうは即座に処刑)」関数に、しかもいずれの関数でも一方のアクションが死ねばもう一方もキャンセル。

2013-10-27 16:15:30
Jun Inoue @jun0inoue

#PCPjH timeout 関数のタイムキーパーの後処理が race 使うと超簡単に。「一定時間まって終了するだけ」のタイムキーパーと「仕事して値を返す」土方スレを作って race で「ファイッ!」するだけ

2013-10-27 16:19:21
Jun Inoue @jun0inoue

#PCPjH 但し元の timeout では土方スレを作らずに主スレが自分で仕事してたので、主スレに飛んできた例外は仕事関数自体に飛んでくる。しかし race 使った timeout ではその場合単に土方スレに KillThread が飛ぶ。(レースに負けた場合と同じ扱い。)

2013-10-27 16:25:27
Jun Inoue @jun0inoue

#PCPjH Hoogle 見る限りでは、System.Timeout.timeout は本の古い方の実装とほぼ同じ。ただし複数の timeout が走る場合を想定しているらしく、飛ばす例外に uid が振られている。

2013-10-27 16:28:34
Jun Inoue @jun0inoue

#PCPjH Async に fmap したい。TMVar は Functor にならないので、Async の中身を TMVar から STM アクションに変更。

2013-10-27 16:31:02
Jun Inoue @jun0inoue

#PCPjH 本「Async はもうこれ以上変更しません」 現実で誰かが言ったらフラグでしかない。

2013-10-27 16:35:59
コスモ @cosmo__

"子スレッドで起きた例外をハンドルするのを忘れる平行プログラミングでよくあるエラーを防ぐ" うっ、耳が痛い #PCPjH

2013-10-27 16:39:21
Jun Inoue @jun0inoue

#PCPjH 1〜5 まで選択肢を用意しておくと全員が 3 を選んで 3 が事実上の 1 兼 5 になる現象。

2013-10-27 16:43:01
Jun Inoue @jun0inoue

#PCPjH 誰かリモート一人落ちた?

2013-10-27 16:43:26
shelarcy(しぇらーしぃ) @shelarcy

休憩終わり。 Chapter 12. Concurrent Network Servers 開始 #PCPjH

2013-10-27 16:49:18
コスモ @cosmo__

ghc7.6系使っているなら何も考えずにforkIOと書くよりforkFinallyを使うと良さげ! #PCPjH

2013-10-27 17:03:48
shelarcy(しぇらーしぃ) @shelarcy

デフォルトのバッファリング・モードは NoBuffering なんでしたっけ? http://t.co/utEAltqrtB http://t.co/9BW3JjF1h4 #PCPjH

2013-10-27 17:04:24
コスモ @cosmo__

ghcでワンライナー出来るって知らなかった: ghc -e "<program>" #PCPjH

2013-10-27 17:07:53
Jun Inoue @jun0inoue

#PCPjH GHC のスレッドは無茶苦茶軽いので、サーバー書くときもナイーブに一クライアント一スレッドで対応してても十分速い。POSIX スレッドとかではこれは厳しいの? 教えてHな人!

2013-10-27 17:10:08
shelarcy(しぇらーしぃ) @shelarcy

-threaded オプション付きでコンパイルし、+RTS -N オプションを付けて実行するだけで、同じサーバーのコードが複数コアを利用するようになる! #PCPjH

2013-10-27 17:11:39
shelarcy(しぇらーしぃ) @shelarcy

"ghc -e expr" #PCPjH - 4.5.2. 式評価モード - 4.5. 実行モード : http://t.co/TNAhRITPjD #miteru

2013-10-27 17:17:53
Jun Inoue @jun0inoue

#PCPjH 入力された数を二倍するだけのサーバーから、入力された数を積算的に掛けていくサーバーに。かつ掛ける度に新しい値をユーザに通知。積を MVar に保管しておけば通知表示のための handle のロックの面倒を見てもらえるけど contention 凄いので✕。

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

#PCPjH 二つ目のアプローチ。それぞれのサーバースレッドをイベント処理型にしてイベントキューを Chan に。積を更新したスレが全スレのために I/O するよりは軽いけど、やっぱり全スレに通知する手間があるので厳しい。

2013-10-27 17:30:24
前へ 1 2 ・・ 5 次へ