×
システム構成・性能・ソフトウェア

スレッドの最大の特徴は、同じプロセスに属するスレッド同士であれば、メモリ空間(データ領域やヒープ領域)や開いているファイルなどの資源を「共有」しているという点です。これにより、スレッド間でのデータの受け渡しは、プロセス間通信のような複雑で重い処理を経由することなく、共通のメモリを読み書きするだけで極めて高速に行うことができます。また、新しいスレッドの生成や、スレッド間の切り替え(コンテキストスイッチ)にかかるシステムの負荷(オーバーヘッド)は、プロセスを生成・切り替える場合と比較してはるかに小さく、「軽量プロセス(LWP)」と呼ばれることもあります。ただし、複数のスレッドが同じデータを同時に書き換えようとすると、データが破壊されたり矛盾が生じたりする危険性があるため、プログラミングの際には「排他制御」と呼ばれる慎重な同期処理の設計が不可欠となります。これに失敗すると、デッドロック(お互いに処理の完了を待ち合ってフリーズしてしまう現象)などの深刻なバグを引き起こす原因となります。

試験でのポイント

プロセスとの明確な違いを理解しているかが、試験での最大の得点ポイントになります。

  • リソース共有の有無:プロセス同士はメモリ空間が独立しているのに対し、スレッド同士は親プロセスのメモリ空間を共有しているという根本的な違いが最も頻出です。「スレッドはメモリ領域を共有するため通信オーバーヘッドが少ない」という選択肢は正解としてよく登場します。
  • 独立した情報:スレッドはメモリの大半を共有しますが、スレッドごとに「個別に保持しなければならない情報」もあります。具体的には、今プログラムのどこを実行しているかを示す「プログラムカウンタ」、関数の呼び出し履歴やローカル変数を保存する「スタック領域」、および「CPUのレジスタ群」です。これらはスレッド単位で独立して管理されています。
  • マルチコアの恩恵:現代のパソコンやスマートフォンは複数のCPUコア(頭脳)を持っています。マルチスレッドで作られたプログラムは、複数のスレッドを別々のコアに割り当てて「真の同時処理(並列処理)」を行わせることができるため、処理速度を劇的に向上させることが可能です。

関連する用語

プロセス、マルチコア、排他制御