スレッドの利点

複数プロセスを使用する従来の並列プログラムと比較すると、マルチスレッド・プログラムは、パフォーマンスを改善することができます。 スレッドを使用するマルチプロセッサー・システムでは、さらにパフォーマンスを改善することができます。

スレッドの管理

スレッドの管理、すなわちスレッドを作成してその実行を管理することには、 必要なシステム・リソースがプロセスの管理より少なくなります。 例えば、スレッドの作成で必要なのは、 スレッドの専用データ域 (普通は 64 KB) の割り当てと 2 回のシステム・コールだけです。 プロセスの作成は、 親プロセスのアドレス・スペース全体を重複させる必要があるので、 はるかに多くのコストがかかります。

スレッド・ライブラリー API も、プロセスを管理するためのライブラリーより使い方が簡単です。 スレッドの作成に必要なのは、pthread_create サブルーチンだけです。

スレッド間通信

スレッド間通信は、プロセス間通信よりはるかに効率よく、使い方も容易です。 プロセス内のスレッドはすべて同じアドレス・スペースを共有するので、 共有メモリーを使用する必要がありません。 mutex や他の同期ツールを使用して、 同時アクセスされないように共有データを保護してください。

スレッド・ライブラリーが提供する同期機能によって、 柔軟で強力な同期ツールのインプリメンテーションが容易になります。 これらのツールは、メッセージ・キューなどの、 従来のプロセス間通信機能を置き換えることができます。 パイプをスレッド間通信パスとして使用することができます。

マルチプロセッサー・システム

マルチプロセッサー・システムでは、 複数の CPU で複数のスレッドを同時に実行することができます。 したがって、マルチスレッド・プログラムは、ユニプロセッサー・システムよりかなり速く実行できます。 また、スレッドに必要なリソースが少なく、オーバーヘッドの生成も少ないので、複数プロセスを使用するプログラムより速くなります。 例えば、 特にコンテキスト切り替えをしばしば避けることができる M:N ライブラリー・モデルでは、 同じプロセス内のスレッドの切り替えを速くすることができます。 最後に、スレッドを使用することの主な利点は、単一のマルチスレッド・プログラムはユニプロセッサー・システムで働きますが、当然、再コンパイルせずにマルチプロセッサー・システムを利用することができます。

制限

マルチスレッド・プログラミングは、複数の独立エンティティーを使用する並行アルゴリズムのインプリメントに有用です。 ただし、マルチスレッドの代わりに複数プロセスの使用が必要なケースもいくつかあります。

多くのオペレーティング・システムの ID、リソース、状態、または制約事項は、 プロセス・レベルで定義されており、そのため、 プロセス内のすべてのスレッドで共有することができます。 例えば、ユーザーおよびグループの ID とそれに関連する許可は、 プロセス・レベルで扱われます。 プログラミング・エンティティーに異なるユーザー ID を割り当てる必要があるプログラムは、単一のマルチスレッド・プロセスでなく、複数プロセスを使用する必要があります。 他の例には、現在の作業ディレクトリーなどのファイルシステム属性、 およびオープン・ファイルの状態と最大数などがあります。 マルチスレッド・プログラムは、上記の属性が独立の方がうまく操作できる場合は、適切でない可能性があります。 例えば、複数プロセス・プログラムでは、 それぞれのプロセスで多数のファイルを他のプロセスからの介入なしでオープンすることができます。