2

カーネル レベル スレッドでは、1 つのスレッドが I/O をブロックすると、別のスレッドが自由に実行できますが、ユーザー レベル スレッドでは、1 つのスレッドがブロックされるとどうなりますか?

そのプロセスはブロックされたままになりますか。つまり、他のスレッドが実行されないか、または別のスレッドの実行がスケジュールされます。正確にはどうなりますか?

4

1 に答える 1

3

ユーザーレベルのスレッドは、シーケンシャルに実行されるユーザー コードの断片です。1 つのスレッドがしばらく実行された後、別のスレッドに制御が転送されます。これらのスレッドの 1 つがブロックする syscall を行うと、プロセス全体がブロックされます。ユーザーレベルのスレッド化は、カーネルからは単一のスレッド化されたプロセスのように見えます。複数の CPU で同時にスケジューリングすることはできません。

カーネルレベルのスレッドの主な利点は、スレッドが互いに独立して実行され、異なる CPU でスケジュールできることです。1 つがブロックされても、他の人は実行を続けます。

于 2012-05-29T14:21:12.473 に答える