18章asyncioによる並行処理

並行処理(concurrency)とは、たくさんのことに一度に「対処」することです。

並列処理(parallelism)とは、たくさんのことを一度に「処理」することです。

これらは同じではありませんが、互いに関係があります。

一方は構造にかかわり、他方は実行にかかわっています。

並行処理は、(必ずしもそうである必要はありませんが)並列化できる問題を解決するソリューションを構築する方法を提供します。

——Rob PikeGo言語の共同発明者「Concurrency Is Not Parallelism (It's Better)」より[18-01]

Imre Simon教授は、科学には同じことに異なる用語を使い、異なることに同じ用語をあてるという2つの大罪があるとよく言っていました†1。並行または並列プログラミングについて調べると、「並行」と「並列」の定義はそれぞれ異なることがわかります。ここでは、先に引用したRob Pikeの非公式な定義を採用します。

[†1] Imre Simon(1943–2009)はオートマトン理論に大きな影響を与え、トロピカル幾何学(Tropical Mathematics)という分野を創始したブラジルのコンピュータ科学の先駆者です。また、フリーソフトウェアとフリーカルチャーの支持者でもあります。彼と学び、働き、遊ぶことができたのは幸運でした。

真の並列処理には複数のコアが必要です。最新のノートPCにはCPUコアが4個ありますが、普通に、カジュアルに使っていても100個以上のプロセスが恒常的に稼働しています。したがって、ほとんどの処理は並列的ではなく、並行的に行われています。CPU自体には同時に4つを超える処理ができなくても、コンピュータは100個以上のプロセスそれぞれに処理を進める機会を与えるように常に対応しています。10年前であっても100個のプロセスを同時に処理できるマシンはありましたが、処理をするコアは1つだけでした。Rob ...

Get Fluent Python ―Pythonicな思考とコーディング手法 now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.