16章エンタープライズなGoアプリケーションと並行処理

Goの特徴として必ず挙げられるのが「並行処理に強い」という点です。実際、他の言語で並行処理を実装するのに比べ、組み込みの文法だけで簡単に並行化できますし、CPUをコア数いっぱいまで使い切ってくれます。

とはいうものの、エンタープライズ分野のアプリケーションで、並行処理の機能を直接駆使してコーディングすることはまれです。80%のタスクではゴルーチンを自分で立ち上げることもないでしょう。ランタイムが勝手に内部でゴルーチンを使ってくれるため、何もしなくてもスケールしていた、ということも多いでしょう。15%はバッチ処理の中でパフォーマンス改善のために並行処理を活用したくなるかもしれません。残りの5%では、競技プログラミング的なCPUを駆使して最適なパラメーターを導出するようなアルゴリズムを開発するタスクを実行することになるかもしれません。

Goを学ぶと、かっこいい非同期分散オンラインタスク処理基盤のようなものを作りたくなるでしょう。しかし、デバッグや異常時の処理など手間暇がかかることもありますので、すでに安定したミドルウェアがあるのであれば、それを利用するのも手段の1つです。また、1000アクセス並列でデータベースに書き込みを行うのではなく、1000レコードをまとめて挿入できるバッチインサートを使うAPIがあればそちらを使うなど、並行処理にしなくても済む方法をまず検討しましょう。

ただし、80%のタスクで実装する必要がないと言っても、「Goの並行処理」に興味を持った読者からすると、まったくこの話題に触れずに本が終わってしまっては、がっかりしてしまうでしょう。本章ではGoの並行処理の基本設計、並行処理のプリミティブ、「Goで並行処理を安全に実装するためのイディオム」をいくつか紹介します。 ...