並行性は並列性ではない
Concurrency is not parallelism by Andrew Gerrand
Goについて多くの人が知っていることが一つあるとすれば、それは並行性のために設計されているということでしょう。 ゴルーチンとチャンネルのデモンストレーションなしにGoの紹介が完結することはありません。
しかし人々は 並行性 (concurrency) という言葉を聞くと、しばしば 並列性 (parallelism) を思い浮かべます。 これは関連してはいますが、まったく別の概念です。プログラミングにおいて、並行性とは独立して実行される 処理の 組み合わせ であり、並列性は(互いに関連している場合もある)計算の同時 実行 のことです。 並行性とは同時に多くのことに 対処すること であり、並列性とは同時に多くのことを 行うこと です。
この混同を整理するために、Rob Pikeは Heroku のWazaカンファレンスで Concurrency is not parallelism という 講演を行いました。その講演の録画が数ヶ月前に公開され、こちらから視聴できます。
スライドは go.dev/talks で公開されています (左右の矢印キーでページを移動できます)。
Goの並行性のプリミティブについて学びたい方は、Go concurrency patterns (スライド)をご覧ください。
By Andrew Gerrand