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

マルチスレッドの利点

この節では、マルチスレッドの利点について概説します。

プログラムのマルチスレッド化には、次のような利点があります。

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

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

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

スレッドによって並行化されたアプリケーションでは、ほとんどの場合、利用可能なプロセッサ数を考慮する必要はありません。アプリケーションのパフォーマンスはプロセッサが増えると透過的に向上します。これは、利用可能なプロセッサ数に応じたスレッドのスケジューリングがオペレーティングシステムによって処理されるためです。マルチコアプロセッサやマルチスレッドプロセッサが使用可能な場合は、それらのコアやスレッドが OS によってプロセッサとして見なされるため、マルチスレッドアプリケーションの性能はそれに応じて向上します。

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


注 –

このマニュアルでは、特に断りのない限り、マルチプロセッサの説明はマルチコアプロセッサとマルチスレッドプロセッサにも該当します。


プログラム構造の改善

ほとんどのプログラムは、単一のスレッドで実現するよりも複数の独立した (あるいは半独立の) 実行単位の集合体として実現した方が効果的に構造化されます。たとえば、多様なタスクを実行するスレッド化されていないプログラムでは、そのコードの大部分がそれらのタスクの調整のためだけに費やされる可能性があります。それらのタスクをスレッドとしてプログラミングすれば、コードを簡略化できます。マルチスレッド化されたプログラム (特に、複数の並行ユーザーにサービスを提供するプログラム) の方が、シングルスレッド化されたプログラムよりもユーザーのさまざまな要求に柔軟に対応できます。

システムリソースの節約

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

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

さらに、プロセス本来の独立性のため、ほかのプロセスに属するスレッドとの通信や同期など、プログラマに課される処理が多くなります。この処理には、異なるプロセスに含まれるスレッド間の通信の処理や、それらのスレッドの操作の同期などがあります。これらのスレッドが同じプロセスに含まれていると、通信や同期がはるかに簡単になります。

スレッドと RPC の併用

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

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


注 –

分散システム全体にわたって動作するアプリケーションのマルチスレッド化を実現するには、MPI (Message Processing Interface) の方が効果的なアプローチになることがあります。MPI の詳細は、http://www-unix.mcs.anl.gov/mpi/ を参照してください。

Sun HPC ClusterToolsTM ソフトウェアには、MPI のオープンソース実装である OMPI (Open MPI Message Passing Interface) が含まれています。ClusterTools の詳細は、Sun HPC ClusterTools の製品ページ を参照してください。