Book description
シンプルな言語仕様と手厚い並行処理機能で多くのプログラマの心を捉えるGo言語。いまではサーバーサイドでのプログラミングやコンテナツールの実装言語など、さまざまな分野で活用されています。本書は、Goの並行処理の設計哲学、言語の機能、また実際のプログラミングテクニックや並行処理の使い方、システムに導入する際のベストプラクティスとパターン、その内部構造までを簡潔にまとめた書籍です。普段からGoでプログラミングをしているプログラマや、並行処理について学習したいプログラマが、新たな知識を身につけるのに良い一冊となるでしょう。
Table of contents
- 大扉
- 原書大扉
- クレジット
- 訳者まえがき
- 序文
- 本書の対象読者
- 本書の読み進め方
- オンライン資料
- 表記上のルール
- サンプルコードの使用について
- 意見と質問
- 謝辞
- 1章 並行処理入門
- 1.1 ムーアの法則、Webスケール、そして私たちのいる混沌
- 1.2 なぜ並行処理が難しいのか
- 1.2.1 競合状態
- 1.2.2 アトミック性
- 1.2.3 メモリアクセス同期
- 1.2.4 デッドロック、ライブロック、リソース枯渇
- 1.2.5 並行処理の安全性を見極める
- 1.3 複雑さを前にした簡潔さ
- 2章 並行性をどうモデル化するか:CSPとは何か
- 2.1 並行性と並列性の違い
- 2.2 CSPとは何か
- 2.3 これがどう役に立つのか
- 2.4 Goの並行処理における哲学
- 3章 Goにおける並行処理の構成要素
- 3.1 ゴルーチン(goroutine)
- 3.2 syncパッケージ
- 3.2.1 WaitGroup
- 3.2.2 MutexとRWMutex
- 3.2.3 Cond
- 3.2.4 Once
- 3.2.5 Pool
- 3.3 チャネル(channel)
- 3.4 select文
- 3.5 GOMAXPROCSレバー
- 3.6 まとめ
- 4章 Goでの並行処理パターン
- 4.1 拘束
- 4.2 for-selectループ
- 4.3 ゴルーチンリークを避ける
- 4.4 orチャネル
- 4.5 エラーハンドリング
- 4.6 パイプライン
- 4.6.1 パイプライン構築のためのベストプラクティス
- 4.6.2 便利なジェネレーターをいくつか
- 4.7 ファンアウト、ファンイン
- 4.8 or-doneチャネル
- 4.9 teeチャネル
- 4.10 bridgeチャネル
- 4.11 キュー
- 4.12 contextパッケージ
- 4.13 まとめ
- 5章 大規模開発での並行処理
- 5.1 エラー伝播
- 5.2 タイムアウトとキャンセル処理
- 5.3 ハートビート
- 5.4 複製されたリクエスト
- 5.5 流量制限
- 5.6 不健全なゴルーチンを直す
- 5.7 まとめ
- 6章 ゴルーチンとGoランタイム
- 6.1 ワークスティーリング
- 6.1.1 タスクと継続、どちらを盗むのか
- 6.2 すべての開発者にこの言葉を贈ります
- 6.3 結論
- 補遺A
- A.1 ゴルーチンのエラーの解剖
- A.2 競合状態の検出
- A.3 pprof
- A.4 trace
- 補遺B go generate
- B.1 空インターフェースの使用について
- B.2 go generateとは何か
- B.3 go generate の機能
- B.4 例: genny を利用する
- B.5 ジェネリクスについて
- 著者紹介
- 奥付
Product information
- Title: Go言語による並行処理
- Author(s):
- Release date: October 2018
- Publisher(s): O'Reilly Japan, Inc.
- ISBN: 9784873118468
You might also like
book
プログラミングRust
RustはMozilla財団の支援下で開発が進められており、Mozillaの次世代ブラウザエンジンの実装にも用いられているシステムプログラミング用言語です。C/C++並みのパフォーマンスと低レベルなメモリ操作機能、型システムを用いたメモリとスレッドの安全性を両立し、さらに安全な並列性も実現した、いま最も注目されている言語です。このRustをテーマにした本書は、Rust特有の所有権、移動、借用といった概念だけでなく、生産性と柔軟性を向上させるジェネリックコード、クロージャ、イテレータ、コレクションといった高度な機能についても詳しい説明を加えており、言語仕様から高度なプログラミング技術までを網羅した決定版です。
book
データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理
現代の分散システム設計においてデータの扱いは重要な課題です。本書は、データを処理し、保存するさまざまなテクノロジーの特性を詳述することで、ツールの長所と短所を理解し、システムの課題と使用するアプリケーションに適した選択肢の発見を助けます。本書では、データの量や複雑さ、変化が課題となるアプリケーションを「データ指向」と名づけ、データ指向アプリケーションの設計を支える基本的な概念を解説します。そしてレプリケーション、パーティション、トランザクションなど分散データベースについて扱い、さらにバッチ処理、ストリーム処理など、データセットの取り出しや結合について解説します。
book
Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎
Pythonの機械学習用ライブラリの定番、scikit-learnのリリースマネージャを務めるなど開発に深く関わる著者が、scikit-learnを使った機械学習の方法を、ステップバイステップで解説します。ニューラルネットを学ぶ前に習得しておきたい機械学習の基礎をおさえるとともに、優れた機械学習システムを実装し精度の高い予測モデルを構築する上で重要となる「特徴量エンジニアリング」と「モデルの評価と改善」について多くのページを割くなど、従来の機械学習の解説書にはない特長を備えています。
book
Go言語によるWebアプリケーション開発
Goプログラミングについて一歩踏み込んだプロユースの解説書。読者はシンプルなコードを書きながら、実運用アプリケーションの開発で使うスキルとテクニックを学ぶことができます。本書のサンプルプログラムはどれもシンプルですがとても実践的です。拡張性、並行処理、高可用性といったエンタープライズアプリケーションの開発で直面する現実的な問題に対するソリューションが含まれています。本書を読めば、実際の業務に必要な技能――Goによる開発手法および関連技術の使い方――をマスターし、ツールやプログラムの開発スキルを迅速かつ簡単に向上できます。日本語版では、監訳者の鵜飼文敏氏による巻末付録「Goらしいコードの書き方」を収録しました。