スレッド (コンピュータ)
C言語やC++といった初期のプログラミング言語においては、スレッドは当初言語仕様では標準サポートされていなかった。そのため、例えばMicrosoft WindowsではWindows APIのスレッド、POSIX準拠OSではPOSIXスレッド (Pthreads) といったように、プラットフォーム固有のAPIを利用する必要があった。Javaや.NET Framework/.NET Coreに代表されるように、現代的なほとんどの後発言語およびプラットフォームではスレッドを標準的にサポートしている。
C++11規格ではBoost C++ライブラリをベースとしたスレッドライブラリが標準化された。C11規格でもスレッドライブラリが標準として定義されたが、実装は任意であり必須ではない。
計算機上で並行計算/並列計算あるいはマルチタスクといった、複数の処理を同時に実行するためには、計算機およびその上で動作するオペレーティングシステム (OS) が、プロセッサ(CPU)時間を個々の処理に対して適切に分配・スケジューリングする機能に対応している必要がある。同時に実行する部分を指定することができる、処理の分割の単位として、スレッドとプロセスがある。
新たなプロセスを動作させるためには、CPUやメインメモリ上のアドレス空間などの計算資源(リソース)を割り当てる必要がある。それぞれのプロセスは、割り当てられた資源内で独立して動く。通例、システム全体の動作の安定性および安全性の観点から、個々のプロセスは実際のメモリ上の位置を指す物理アドレス空間を直接使用するのではなく、OSによって仮想化・分離された仮想アドレス空間を使用する。プロセスごとにメモリ空間が独立しているため、あるプロセスから別のプロセスが参照しているメモリに直接アクセスするようなことはできない。しかし、独立したメモリ空間が不必要な場合では、メモリの利用効率が悪くなってしまう。プログラムによっては、処理ごとに別々の空間にあるメモリを利用するのではなく、単一の空間内のメモリを共有しながら複数の処理を行なう「共有メモリ方式」のほうが、ロジックの実装のしやすさやメモリ効率の面で優れている場合がある。これを可能にするのがスレッドである。
マルチタスクOSにおいて、1つのタスクは、1つ以上のプロセスから構成され、1つのプロセスは、1つ以上のスレッドから構成される。集合で表すと、スレッド ∈ プロセス ∈ タスクというようになる。しかし、この関係は環境によって異なる。例えば、リアルタイムOSでは、タスク ≒ スレッド、スレッド ∈ プロセス、である。