Parallel and Concurrent Programming in Haskell 読書会 第6回
#PCPjH waitBoth を waitEither に変えれば「二つアクション走らせて両方返す」関数が「二つアクション走らせて早いほう返す(遅いほうは即座に処刑)」関数に、しかもいずれの関数でも一方のアクションが死ねばもう一方もキャンセル。
2013-10-27 16:15:30#PCPjH timeout 関数のタイムキーパーの後処理が race 使うと超簡単に。「一定時間まって終了するだけ」のタイムキーパーと「仕事して値を返す」土方スレを作って race で「ファイッ!」するだけ
2013-10-27 16:19:21#PCPjH 但し元の timeout では土方スレを作らずに主スレが自分で仕事してたので、主スレに飛んできた例外は仕事関数自体に飛んでくる。しかし race 使った timeout ではその場合単に土方スレに KillThread が飛ぶ。(レースに負けた場合と同じ扱い。)
2013-10-27 16:25:27#PCPjH Hoogle 見る限りでは、System.Timeout.timeout は本の古い方の実装とほぼ同じ。ただし複数の timeout が走る場合を想定しているらしく、飛ばす例外に uid が振られている。
2013-10-27 16:28:34#PCPjH Async に fmap したい。TMVar は Functor にならないので、Async の中身を TMVar から STM アクションに変更。
2013-10-27 16:31:02休憩終わり。 Chapter 12. Concurrent Network Servers 開始 #PCPjH
2013-10-27 16:49:18デフォルトのバッファリング・モードは NoBuffering なんでしたっけ? http://t.co/utEAltqrtB http://t.co/9BW3JjF1h4 #PCPjH
2013-10-27 17:04:24nc コマンド #PCPjH - Netcat - Wikipedia : http://t.co/L8kBJJPbNj #miteru
2013-10-27 17:06:38#PCPjH GHC のスレッドは無茶苦茶軽いので、サーバー書くときもナイーブに一クライアント一スレッドで対応してても十分速い。POSIX スレッドとかではこれは厳しいの? 教えてHな人!
2013-10-27 17:10:08-threaded オプション付きでコンパイルし、+RTS -N オプションを付けて実行するだけで、同じサーバーのコードが複数コアを利用するようになる! #PCPjH
2013-10-27 17:11:39[再掲] UserInterrupt 非同期例外 http://t.co/N5j7w9eSXF #PCPjH
2013-10-27 17:15:34"ghc -e expr" #PCPjH - 4.5.2. 式評価モード - 4.5. 実行モード : http://t.co/TNAhRITPjD #miteru
2013-10-27 17:17:53#PCPjH 入力された数を二倍するだけのサーバーから、入力された数を積算的に掛けていくサーバーに。かつ掛ける度に新しい値をユーザに通知。積を MVar に保管しておけば通知表示のための handle のロックの面倒を見てもらえるけど contention 凄いので✕。
2013-10-27 17:27:10#PCPjH 二つ目のアプローチ。それぞれのサーバースレッドをイベント処理型にしてイベントキューを Chan に。積を更新したスレが全スレのために I/O するよりは軽いけど、やっぱり全スレに通知する手間があるので厳しい。
2013-10-27 17:30:24