2章並行性をどうモデル化するか:CSPとは何か
2.1 並行性と並列性の違い
並行性と並列性は異なるという事実は、しばしば見落とされたり誤解されています。開発者との会話で、この2つの用語はしばしば「何かが動作してるときに同時に別の何かが動作している」という意味で区別されずに使われています。「並列」という言葉をこの文脈で使うのは正しいのですが、通常開発者がコードについて話している場合、本当は「並行」という言葉を使っているはずです。
この違いを区別する理由は、計算機科学に詳しそうに振る舞うこと以上に意味があります。並行性と並列性の違いはコードの設計をする際に非常に強力な抽象化になることがわかり、そしてGoはこの違いを最大限に活かしています。これら2つの概念はどのように異なるのか、この抽象化の力を理解するために早速見てみましょう。まずとても単純な一文から考えてみます。
並行性はコードの性質を指し、並列性は動作しているプログラムの性質を指します。
これはちょっとおもしろい区別ですね。私たちはいつもこれら2つの事柄をこの一文と同様に考えているでしょうか。私たちはコードが並列に動作するように書いていますよね。
このことについてちょっと考えてみましょう。ある2つの領域が並列に動作するようにコードを書いたときに、プログラムが実行されてそれが実際に起こるという保証はあるでしょうか。もしマシンのCPUが1コアだったら何が起きるでしょうか。並列に動作すると思う人もいるかもしれませんが、それは真ではありません。
プログラム内のその2つの領域は並列に動作しているように見えますが、実際は見た目にはわからないほど素早く逐次実行をしています。CPUのコンテキストは異なるプログラムの間で時間を共有するために切り替わり、十分に大まかな時間感覚では、複数のタスクが並列に実行しているように見えるのです。同じプログラムのバイナリを2コアのマシンで実行すると、先のプログラムの2つの領域は実際に並列に動作しています。 ...