マルチスレッドのプログラミング

マルチスレッドの利点

アプリケーションの応答性の改善

互いに独立した処理を含んでいるプログラムは、設計を変更して、個々の処理をスレッドとして定義できます。たとえば、マルチスレッド化された GUI のユーザは、ある処理が完了しないうちに別の処理を開始できます。

マルチプロセッサの効率的な利用

スレッドによって並行化されたアプリケーションでは、ほとんどの場合、利用可能なプロセッサ数を考慮する必要はありません。そのようなアプリケーションでは、プロセッサを追加するだけで性能が目に見えて改善されます。

行列の乗算のような並列性の度合いが高い数値計算アプリケーションは、マルチプロセッサ上でスレッドを実装することにより、処理速度を大幅に改善できます。

プログラム構造の改善

ほとんどのプログラムは、単一のスレッドで実現するよりも複数の独立した (あるいは半独立の) 実行単位の集合体として実現した方が効果的に構造化されます。マルチスレッド化されたプログラムの方が、シングルスレッド化されたプログラムよりもユーザのさまざまな要求に柔軟に対応できます。

システム資源の節約

共有メモリーを通して複数のプロセスが共通のデータを利用するようなプログラムは、複数の制御スレッドを適用しています。

しかし、各プロセスは完全なアドレス空間とオペレーティングシステム上での状態をもちます。そのような大規模な状態情報を作成して維持しなければならないという点で、プロセスはスレッドに比べて時間的にも空間的にも不利です。

さらに、プロセス本来の独立性のため、他のプロセスに属するスレッドと通信したり同期を取ったりする際に、プログラマは面倒な処理をしなくてはなりません。

スレッドと RPC の併用

スレッドと遠隔手続き呼び出し (RPC) パッケージを組み合わせると、メモリーを共有していないマルチプロセッサ (たとえば、ワークステーションの集合体) を活用できます。この方法では、アプリケーションの分散処理を比較的簡単に実現でき、ワークステーションの集合体を 1 台のマルチプロセッサのシステムとして扱います。

たとえば、最初にあるスレッドがいくつかの子スレッドを生成します。それらの子スレッドは、それぞれが遠隔手続き呼び出しを発行して、別のワークステーション上の手続きを呼び出します。結果的に、最初のスレッドが生成した複数のスレッドは、他のコンピュータとともに並列的に実行されます。