Pythonクイックリファレンス 第4版
by Alex Martelli, Anna Martelli Ravenscroft, Steve Holden, Paul McGuire, 鈴木 駿, 株式会社クイープ
15章並行性:スレッドとプロセス
プロセスとは、実行中のプログラムのインスタンスのことである。プロセスはOSによって他のプロセスから保護される。プロセスどうしをやり取りさせるには、プロセス間通信(IPC)メカニズムを使うか、ファイル(11章)、データベース(12章)、ネットワークインターフェイス(18章)を介してやり取りするように明示的に手配しなければならない。ファイルやデータベースといったデータストレージメカニズムを使ってプロセスを通信させる一般的な方法は、あるプロセスが書き込んだデータを、別のプロセスが読み戻すというものだ。本章では、プロセスを使ったプログラミングを取り上げる。これには、Pythonの標準ライブラリのモジュールsubprocessおよびmultiprocessing、osモジュールのプロセス関連の部分(パイプによる単純なIPCを含む)、メモリマップファイルと呼ばれるクロスプラットフォームのIPCメカニズム、そして 3.8+ multiprocessing.shared_memoryモジュールが含まれる。
スレッドとは、1つのプロセスの中で他のスレッドとグローバル状態(メモリ)を共有する制御フローのことである(当初は「軽量プロセス」と呼ばれていた)。すべてのスレッドが同時に実行されているように見えるが、実際には1つ以上のプロセッサ/コアを「交代で」使っているかもしれない。スレッドをマスターするのはそう簡単ではなく、マルチスレッドプログラムはテストやデバッグが難しいことが多い。ただし、この後の「threadingか、multiprocessingか、それとも非同期プログラミングか」で説明するように、マルチスレッドをうまく使うと、シングルスレッドのプログラミングよりもパフォーマンスがよくなることがある。本章では、 ...