スレッドライブラリは、非結合スレッドを実行するための、実行リソース内の LWP 数を自動的に調整します。これには次の目的があります。
ブロックされていない LWP がなくなったという理由だけで、プログラムがブロックされないようにする。
たとえば、実行可能な非結合スレッドの数が LWP の数より多いとき、アクティブなすべてのスレッドがカーネル内で無期限の待ち状態 (たとえば端末からの入力待ち) になりブロックしていると、待ち状態のスレッドのどれかが返るまでプロセスの処理が進まなくなります。
LWP を効率的に使用する。
たとえば、スレッドごとに 1 つの LWP を生成したとすると、いつもアイドル状態であるような LWP の数が多くなり、使われていない LWP が要求するリソースによってオペレーティング環境の負荷が増大します。
タイムスライスが適用されるのは LWP であって、スレッドではありません。つまり、LWP が 1 つしか存在しなければ、プロセス内でタイムスライスは行われません。その LWP 上のスレッドは、スレッド間同期機構でブロックされるか、実行リソースを横取りされるか、または終了するまで実行を続けます。
スレッドに対する優先順位は、pthread_setprio(3T) で設定できます。優先順位の低い非結合スレッドは、それよりも優先順位の高い非結合スレッドが実行可能になっていないときだけ LWP に割り当てられます。ただし、結合スレッドは自分専用の LWP をもつので、LWP を争奪することはありません。なお、pthread_setprio() で設定されるスレッド優先順位は、CPU に対してではなく LWP に対するスレッドのアクセスを調整します。
スケジューリングをきめ細かく制御する必要がある場合は、スレッドを LWP に結合します。多数の非結合スレッドが 1 つの LWP を争奪するような状況では、きめ細かい制御を実現できないからです。
特に、優先順位の低い非結合スレッドが優先順位の高い LWP 上にあり CPU 上で実行されていて、優先順位の低い LWP に割り当てられた優先順位の高い非結合スレッドが実行されていないことがあります。このようにスレッドの優先順位は、CPU へのアクセスについての 1 つのヒントにすぎません。
リアルタイムスレッドは、外部からの入力に対して迅速な応答が必要なときに使用します。たとえば、マウスの動きを追跡するスレッドは、マウスボタンのクリックにただちに反応しなければなりません。そのスレッドを LWP に結合すれば、必要なときにいつでも LWP を使用できるようになります。その LWP をリアルタイムスケジューリングクラスに割り当てれば、マウスボタンのクリックに迅速に反応するようにスケジューリングされます。