10章並行処理

この章のトピックである「並行処理(concurrent processing)」あるいは「並行性(concurrency)」は、「ひとつの処理を独立した複数のコンポーネントに分割し、コンポーネント間で安全にデータを共有しながら計算をすること」と捉えることができます。多くの言語では並行性をライブラリを介して提供しており、こうしたライブラリでは多くの場合、OSレベルのスレッドによって、ロックを使ってデータを共有します。しかし、Go言語ではこうした方法は採用されていません。議論の余地はあるものの、この言語の最大の特徴であると多くの人が考えているGoの並行性のモデルは、CSP (Communicating Sequential Processes)に基づいています。CSPはTony Hoareホーア†1によって1978年に書かれた論文(https://oreil.ly/x1IVG )で発表されたものです。CSPを使って実装される問題解決のパターンは、標準的なものに負けず劣らず強力であるにもかかわらず、はるかに理解しやすいものです。

[†1] Hoareはクイックソートの考案者でもあります。

この章ではGoの並行性のバックボーンとなる機能(ゴルーチン、チャネル、キーワードselect)の概要を説明し、続いて、Goの並行処理の一般的なパターンや低レベルのテクニックのほうが有効なケースについて説明します。

10.1 並行性をいつ利用するべきか

まず警告から始めましょう。自分のプログラムで並行性を利用する前に、利用することで何らかの効果があることを確認してください。Go言語に馴染みのない開発者が並行性を使ってみようとすると、次のような段階を経るのが一般的です。

  1. これはすばらしい! ...

Get 初めてのGo言語 ―他言語プログラマーのためのイディオマティックGo実践ガイド now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.