スレッドは、マルチスレッドのプログラミングにおいて基本となるプログラミングインタフェースです。ユーザレベルのスレッド [ユーザレベルのスレッドという呼称は、システムプログラマだけが関係するカーネルレベルのスレッドと区別するためのものです。このマニュアルは、アプリケーションプログラマ向けであるため、カーネルレベルのスレッドについては触れません。] はユーザ空間で処理されるため、カーネルのコンテキストスイッチの負荷を増やすことはありません。何百ものスレッドを使用するようなアプリケーションでも、カーネルのリソースをそれほど使用しなくてもすみます。どのくらいの量のカーネルリソースをアプリケーションが必要とするかは、主にアプリケーション自体の性質で決まります。
スレッドは、それらが存在するプロセスの内部からだけ参照でき、アドレス空間や開いているファイルなどすべてのプロセスリソースを共有します。スレッドごとに固有な状態としては次のものがあります。
スレッドはプロセスの命令とそのデータの大半を共有するので、あるスレッドが行なった共有データの変更は、プロセスの他のすべてのスレッドから参照できます。スレッドが自分と同じプロセス内の他のスレッドとやり取りを行う場合は、オペレーティング環境を介する必要はありません。
デフォルトでは、スレッドは非常に軽量です。しかし、スレッドをより厳格に制御したいアプリケーションでは (たとえば、スケジューリングの方針をより厳密に適用したい場合など)、スレッドを結合できます。アプリケーションがスレッドを実行リソースに結合すると、そのスレッドはカーネルのリソースとなります (詳細は、「システムスコープ (結合スレッド)」を参照してください)。
以下に、ユーザレベルのスレッドの利点を要約します。
独自のアドレス空間を生成する必要がないので、生成に伴うシステムへの負荷が小さくてすみます。わずかな量の仮想メモリを、実行時のアドレス空間に確保するだけです。
同期がカーネルレベルでなくユーザレベルでとられるため、高速な同期が可能です。
スレッドライブラリ libpthread と libthread によって、簡単に管理できます。