図 9–1 に LWP、ユーザーレベル、およびカーネルレベルの関係を示します。
ユーザーレベルのスレッドライブラリで利用できる LWP の数は、現在アクティブなユーザーレベルのスレッドに応じて決定されます。オペレーティング環境は、どの LWP をどのプロセッサでいつ実行させるかを決定します。このとき、ユーザースレッドは考慮されません。カーネルは、LWP のスケジューリングクラスと優先順位に従って、LWP を CPU リソースに割り当てます。
各 LWP はカーネルによって独立に振り分けられ、独立したシステムコールを実行し、独立したページフォルトを引き起こし、マルチプロセッサのシステム上では並列に動作します。
LWP の機能の中には、特別なスケジューリングクラスなどのように、スレッドからは直接には参照できないものがあります。
Solaris 9 で導入された新しいスレッドライブラリでは、スレッドごとに 1 つの LWP が割り当てられます。このスレッドライブラリは、Solaris 8 の代替 libthread と同じ機能を持ちます。
この新しい実装によって、従来のスレッドライブラリ設計で発生していた問題 (主に、シグナル処理と多重度) の多くが解決されます。新しいスレッドライブラリには、 thr_setconcurrency(3THR) を使用して目標多重度を設定する必要はありません。すべてのスレッドが LWP 上で実行されるためです。
今後の Solaris リリースのスレッドライブラリでは、複数の LWP 上で非結合スレッドが多重化されるようになる可能性があります。ただし、次にあげる、Solaris 9 で現在有効な制約は保持されます。
すべての実行可能スレッドは LWP に接続される。
ライブラリ自体は隠しスレッドを生成しない。
1 つのスレッドだけで動作するマルチスレッドプロセスと従来のシングルスレッドプロセスは、同じセマンティクスを持つ。