TL;DR

ユーザ空間で実装されたスレッド。カーネルレベルスレッドと違い、OS のカーネルは介在しない。

なぜ必要か

Wikipedia によると、ユーザレベルスレッドはオーバーヘッドが非常に小さく、実装も簡単である。カーネルスレッドはプロセスとほとんど同じように管理されるので、コンテキストスイッチなどのオーバーヘッドがプロセス並みになり、作れるスレッドの数の制限も厳しくなる。

仕組み

スレッドの切り替えは、プロセスがユーザ空間で動いている間に、ライブラリ内のスレッドスケジューラが行う。

注意点

カーネルから見ると 1 つのプロセス内で常に 1 つのスレッドしか動いていないので、マルチプロセッサの恩恵を受けられない。また、あるスレッドがカーネル内で入出力待ちになると、全スレッドが入出力待ちになってしまう。Wikipedia では、このため性能向上よりもプログラミングの手法としての意味が中心だとしている。

関連

出典