スレッドの解説(基本情報技術者シラバス用語)

目次

スレッドとは

スレッドとは、プロセス(実行中のプログラム)の内部で、CPUが処理を実行する「最小の処理単位」のことです。一つのプロセスは、少なくとも一つのスレッドを持っています。プロセスが独自のメモリ領域を丸ごと確保するのに対し、スレッドは同じプロセス内のメモリ領域(変数やデータなど)を共有しながら、並行して処理を行います。これにより、プロセスを新しく作るよりも少ない負荷で、複数の作業を素早く同時に実行することができます(マルチスレッド)。

具体例

  • Webブラウザの動作:ブラウザ(プロセス)を起動しているとき、1つのスレッドが画面のデザインを描画し、別のスレッドがインターネットから画像をダウンロードし、さらに別のスレッドがユーザーのキーボード入力を監視しています。これらがメモリ上の同じデータを共有しながら連携して動いています。
  • テキストエディタ:文字を入力する処理と、入力された文字のスペルチェックを行う処理を、別々のスレッドで同時に実行することで、入力操作を妨げずに裏で自動チェックを行えます。

もう少し詳しく

スレッド(Thread)は、「糸」や「筋道」を意味する言葉で、コンピュータの世界では、プロセスの中で実際に命令を逐次実行していく「CPUの実行単位」を指します。従来、プログラムは1つのプロセスにつき1つのスレッド(シングルスレッド)で動作するのが基本でしたが、現代の複雑なアプリケーションでは、1つのプロセス内に複数のスレッドを生成して並行処理を行う「マルチスレッド」という設計が主流となっています。プロセスが「作業部屋(メモリ空間やリソース)」だとすれば、スレッドはその部屋の中で働く「作業員」に例えることができます。

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

試験でのポイント

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

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

関連する用語

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

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ