Book description
並列・並行プログラミングはプログラマの重要な関心事であり、常に注目を集めている話題です。これまで、関数型言語は並列・並行プログラミングに有利であると言われてきましたが、それを解説する書籍はありませんでした。本書では、純粋関数型言語Haskellが提供する並列・並行プログラミングの機能を俯瞰し、実践的な問題を解いていきます。その根底にある考え方は、関数プログラミングの核心であるモジュラリティです。また本書では、実際の問題を解決するときに陥りがちな落とし穴や、高い性能を出すためのtipsなどをまとめています。
Table of contents
- 大扉
- 原書大扉
- 訳者まえがき
- まえがき
- 想定読者
- 本書の読み方
- 本書の表記法
- サンプルコードの使用
- 謝辞
- 第1章 はじめに
- 1.1 用語:並列性と並行性
- 1.2 ツールとリソース
- 1.3 サンプルコード
- 第1部 並列Haskell
- 第2章 基本の並列性:Evalモナド
- 2.1 遅延評価と弱頭部正規形
- 2.2 Evalモナド、rpar、rseq
- 2.3 例:並列数独ソルバ
- 2.4 Deepseq
- 第3章 評価戦略
- 3.1 戦略の並列化
- 3.2 リストを並列に評価する戦略
- 3.3 例: K平均法
- 3.3.1 K平均法の並列化
- 3.3.2 性能と分析
- 3.3.3 スパーク活動の可視化
- 3.3.4 粒度
- 3.4 GCされるスパークと投機的並列性
- 3.5 parBufferを使った遅延ストリームの並列化
- 3.6 チャンク分け戦略
- 3.7 同一性特性
- 第4章 データフロー並列: Parモナド
- 4.1 例: グラフの最短路
- 4.2 パイプライン並列
- 4.2.1 生産者の流量制限
- 4.2.2 パイプライン並列の制限
- 4.3 例: 会議の時間割
- 4.3.1 並列性の追加
- 4.4 例: 並列型推論器
- 4.5 別のスケジューラを使う
- 4.6 戦略と比較したParモナド
- 第5章 Repaを用いたデータ並列プログラミング
- 5.1 配列、シェイプ、添字
- 5.2 配列に対する操作
- 5.3 例: 最短路の計算
- 5.3.1 プログラムの並列化
- 5.4 畳み込みとシェイプ多相
- 5.5 例: 画像の回転
- 5.6 まとめ
- 第6章 AccelerateによるGPUプログラミング
- 6.1 概要
- 6.2 配列と添字
- 6.3 単純なAccelerate計算を実行する
- 6.4 スカラ配列
- 6.5 配列に添字でアクセスする
- 6.6 Accの中で配列を作る
- 6.7 2つの配列を綴じ合わせる
- 6.8 定数
- 6.9 例: 最短路問題
- 6.9.1 GPU上で実行する
- 6.9.2 CUDAバックエンドのデバッグ
- 6.10 例: マンデルブロ集合の生成器
- 第2部 並行Haskell
- 第7章 並行制御の基本: スレッドと MVar
- 7.1 例: 備忘通知
- 7.2 通信: MVar
- 7.3 簡単なチャネルとしてのMVar:ログサービス
- 7.4 共有状態としてのMVar
- 7.5 組み立て部品としてのMVar:無制限チャネル
- 7.6 公平性
- 第8章 入出力の重ね合わせ
- 8.1 Haskellの例外
- 8.2 Asyncのエラー処理
- 8.3 マージ
- 第9章 キャンセルとタイムアウト
- 9.1 非同期例外
- 9.2 非同期例外のマスク
- 9.3 bracket
- 9.4 チャネルに対する非同期例外の安全性
- 9.5 タイムアウト
- 9.6 非同期例外の捕捉
- 9.7 maskとforkIO
- 9.8 非同期例外に関して
- 第10章 ソフトウェアトランザクショナルメモリ
- 10.1 ウィンドウマネージャの例
- 10.2 ブロッキング
- 10.3 変更されるまでのブロッキング
- 10.4 STMを使ったマージ
- 10.5 Async再考
- 10.6 STMを使ったチャネルの実装
- 10.6.1 より多くの操作が可能
- 10.6.2 ブロックされる操作の合成
- 10.6.3 非同期例外安全
- 10.7 もう1つのチャネル実装
- 10.8 有界チャネル
- 10.9 STMでできないこと
- 10.10 性能
- 10.11 まとめ
- 第11章 並行性の高水準な抽象化
- 11.1 スレッド漏れの回避
- 11.2 対称型並行性コンビネータ
- 11.2.1 raceを使ったタイムアウト
- 11.3 Functorインスタンスの追加
- 11.4 まとめ:Async API
- 第12章 並行ネットワークサーバ
- 12.1 簡単なサーバ
- 12.2 単純なサーバの状態による拡張
- 12.2.1 設計1:1つのジャイアントロック
- 12.2.2 設計2:サーバスレッドごとに1つのチャネル
- 12.2.3 設計3:放送チャネルの利用
- 12.2.4 設計4:STMの利用
- 12.2.5 実装
- 12.3 チャットサーバ
- 12.3.1 アーキテクチャ
- 12.3.2 クライアントのデータ
- 12.3.3 サーバのデータ
- 12.3.4 サーバ
- 12.3.5 新しいクライアントの準備
- 12.3.6 クライアントの起動
- 12.3.7 まとめ
- 第13章 スレッドを用いた並列プログラミング
- 13.1 並行性を用いて並列性を達成する方法
- 13.2 例題: ファイル探索
- 13.2.1 直列版
- 13.2.2 並列版
- 13.2.3 性能とスケール
- 13.2.4 セマフォを使ったスレッド数の制限
- 13.2.5 ParIOモナド
- 第14章 分散プログラミング
- 14.1 distributed-processパッケージファミリー
- 14.2 分散並行性か分散並列性か
- 14.3 最初の例:ピン(ping)
- 14.3.1 プロセスとProcessモナド
- 14.3.2 メッセージ型の定義
- 14.3.3 ピンサーバのプロセス
- 14.3.4 マスタープロセス
- 14.3.5 main関数
- 14.3.6 例題のまとめ
- 14.4 複数ノードでのピン
- 14.4.1 1つのマシン上で複数のノード
- 14.4.2 複数のマシン
- 14.5 型付きチャネル
- 14.5.1 チャネルのマージ
- 14.6 失敗処理
- 14.6.1 分散プログラムにおける失敗の哲学
- 14.7 分散チャットサーバ
- 14.7.1 データ型
- 14.7.2 メッセージ送信
- 14.7.3 放送
- 14.7.4 配布
- 14.7.5 サーバのテスト
- 14.7.6 失敗とノードの追加/削除
- 14.8 練習問題: 分散KVS
- 第15章 デバッグ、チューニング、外部コードとのインタフェース
- 15.1 並行プログラムのデバッグ
- 15.1.1 スレッド状態の検査
- 15.1.2 イベントログとThreadScope
- 15.1.3 デッドロックの検出
- 15.2 並行(および並列)プログラムのチューニング
- 15.2.1 スレッドの生成とMVar操作
- 15.2.2 並行データ構造の共有
- 15.2.3 微調整のためのRTSオプション
- 15.3 並行性と外部関数インタフェース
- 15.3.1 スレッドと外部呼び出し
- 15.3.2 非同期例外と外部呼び出し
- 15.3.3 スレッドと外部からの呼び出し
- 著者紹介
- Simon Marlow(サイモン・マーロウ)
- 訳者紹介
- 山下 伸夫 (やました のぶお)
- 山本 和彦 (やまもと かずひこ)
- 田中 英行 (たなか ひでゆき)
- カバーの説明
- 奥付
Product information
- Title: Haskellによる並列・並行プログラミング
- Author(s):
- Release date: August 2014
- Publisher(s): O'Reilly Japan, Inc.
- ISBN: 9784873116891
You might also like
book
Python機械学習クックブック
Pythonによる機械学習を進める上で、頻繁に遭遇すると思われる200超の問題とその解決策を紹介。データ構造(ベクトル、行列、配列)、数値データ、カテゴリデータ、テキスト、画像、日時データの取り扱いといったデータ分析の基本から、特徴量抽出、次元削減、モデルの評価と選択、線形回帰、決定木、ランダムフォレスト、k-最近傍法、SVM、ナイーブベイズ、クラスタリング、ニューラルネットワーク、訓練済みモデルのセーブとロードなど、幅広い内容をカバー。巻末に日本語版付録「日本語テキストの取り扱い」を収録。「やりたいこと」「困っていること」に答えてくれる一冊です。
book
SVGエッセンシャルズ 第2版
SVGは2001年にW3C勧告として公開されたXMLベースの画像フォーマットです。ベクターグラフィックスなので拡大縮小、変形しても美しさが損なわれません。本書では簡潔なサンプルを数多く使い、基本的な図形の作成、アニメーションや複雑なグラフィックスの作成、さらにはスクリプトによる制御など、SVGの基礎から応用までをわかりやすく解説します。スマートフォンのSVG対応も進み、今後はさらに利用が膨らむであろうこのレガシーで今とても熱いフォーマットの基本を本書でマスターしましょう。
book
プログラミングRust
RustはMozilla財団の支援下で開発が進められており、Mozillaの次世代ブラウザエンジンの実装にも用いられているシステムプログラミング用言語です。C/C++並みのパフォーマンスと低レベルなメモリ操作機能、型システムを用いたメモリとスレッドの安全性を両立し、さらに安全な並列性も実現した、いま最も注目されている言語です。このRustをテーマにした本書は、Rust特有の所有権、移動、借用といった概念だけでなく、生産性と柔軟性を向上させるジェネリックコード、クロージャ、イテレータ、コレクションといった高度な機能についても詳しい説明を加えており、言語仕様から高度なプログラミング技術までを網羅した決定版です。
book
大規模データ管理 ―エンタープライズアーキテクチャのベストプラクティス
データ管理と統合が急速に進化する中、複雑で緊密に結合したアーキテクチャから、現代のビジネスに対応できる、より柔軟なデータアーキテクチャへの移行が求められます。 本書は、変化が激しい時代でも長期的に持続可能な方法で大規模なデータ管理を行い、さまざまなユースケースに対応できる統合アーキテクチャを紹介します。この統合アーキテクチャを構成する、膨大なデータ利用に向けた「読み出し専用データストアアーキテクチャ」、リアルタイムなアプリケーションのための「APIアーキテクチャ」、大容量のスループットを実現する「ストリーミングアーキテクチャ」を詳述します。また技術開発、法規制、プライバシーに関する懸念など、データ管理全体を説明し、データガバナンスとセキュリティ、マスターデータ管理、セルフサービスとデータマーケットプレイス、メタデータの重要性について解説します。 企業のデータ戦略にかかわる本書は、アーキテクトはもちろん、経営者、ガバナンスチーム、データ分析・エンジニアリングチーム必携の一冊です。