スレッド
読み:スレッド
外語:thread

 プロセス内に一つ以上生成され、OSがCPUの実行時間を割り当てるための基本的な単位。
目次

概要
 スレッドは、プロセス内に一つ以上生成することができる。こういった状態をマルチスレッドという。
 同一プロセス内に生成されたスレッドは、メモリー空間や多くのリソースを共有している。このためスレッド間で直接情報交換が可能であるため、マルチプロセス時に発生するパフォーマンス低下は存在しない。

特徴

マルチスレッド
 古いUNIXではプロセスを処理の粒度としていたが、現在、Microsoft WindowsもUNIXも、スレッドモデルに対応している。
 スレッドの方が、複数のプロセスを生成するよりも高速でコストが安く付くことから、現在、並列処理はスレッドで行なうのが一般的である。
 UNIX及び互換OSにおいては、POSIXスレッドと呼ばれるPOSIX標準を使うのが一般的となっている。

用途
 マルチスレッド対応のOSで、例えば時間の掛かるI/O処理中でも他の処理が平行して行なえるのは、複数のスレッドに分割して処理され、実行可能なものから順次処理されているからである。
 なお、プロセスとタスクは、プログラマーから見た処理の単位がプロセス、システムから見た処理の単位がタスクと呼び分ける以外、特に差はないものと定義されている。

メモリー空間
 異なるスレッドでも、同じプロセスであれば同じメモリー空間を共有する。
 つまり、グローバル変数静的変数、あるいはヒープは、同じプロセスであれば全てのスレッドで同じものが参照される。
 但し、機構上スタックだけは異なるので、自動変数(auto変数)のみはスレッドローカルになる。

技術
 複数のスレッド間で、同期をとる場合や、あるいは一つのリソースを共有し、その使用中に他を排他するために、ミューテックスセマフォが使われる。
 特定のスレッドローカルな変数(これをスレッドローカルストレージという)を使いたい場合は、言語の機能を使うか、またはオペレーティングシステム(OS)のAPIを使うことで実現する。OSは各スレッドを管理するための情報を持っており、これはスレッドローカルである。このなかに、数に限りはあるが任意の値を格納することが可能で、これを使うとスレッドローカルな変数となる。errnoなども、その一例である。

再検索