スレッド
読み:スレッド
外語:thread
プロセス
内に一つ以上生成され、OSがCPUの実行時間を割り当てるための基本的な単位。
目次
概要
特徴
マルチスレッド
用途
メモリー空間
技術
概要
スレッドは、プロセス内に一つ以上生成することができる。こういった状態を
マルチスレッド
という。
同一プロセス内に生成されたスレッドは、メモリー空間や多くのリソースを共有している。このためスレッド間で直接情報交換が可能であるため、マルチプロセス時に発生するパフォーマンス低下は存在しない。
特徴
マルチスレッド
古い
UNIX
ではプロセスを処理の粒度としていたが、現在、Microsoft WindowsもUNIXも、スレッドモデルに対応している。
スレッドの方が、複数のプロセスを生成するよりも高速でコストが安く付くことから、現在、並列処理はスレッドで行なうのが一般的である。
UNIX及び互換OSにおいては、
POSIXスレッド
と呼ばれるPOSIX標準を使うのが一般的となっている。
用途
マルチスレッド
対応のOSで、例えば時間の掛かるI/O処理中でも他の処理が平行して行なえるのは、複数のスレッドに分割して処理され、実行可能なものから順次処理されているからである。
なお、プロセスとタスクは、プログラマーから見た処理の単位がプロセス、システムから見た処理の単位がタスクと呼び分ける以外、特に差はないものと定義されている。
メモリー空間
異なるスレッドでも、同じプロセスであれば同じメモリー空間を共有する。
つまり、
グローバル変数
や
静的変数
、あるいは
ヒープ
は、同じプロセスであれば全てのスレッドで同じものが参照される。
但し、機構上
スタック
だけは異なるので、自動変数(auto変数)のみはスレッドローカルになる。
技術
複数のスレッド間で、同期をとる場合や、あるいは一つのリソースを共有し、その使用中に他を排他するために、
ミューテックス
や
セマフォ
が使われる。
特定のスレッドローカルな変数(これを
スレッドローカルストレージ
という)を使いたい場合は、言語の機能を使うか、または
オペレーティングシステム
(OS)のAPIを使うことで実現する。OSは各スレッドを管理するための情報を持っており、これはスレッドローカルである。このなかに、数に限りはあるが任意の値を格納することが可能で、これを使うとスレッドローカルな変数となる。
errno
なども、その一例である。
再検索