0

Linuxのトピックに関するここでのほとんどすべての質問に目を通しましたPthreadsが、未解決のまま残っている基本的な疑問があります。

Linux で POSIX スレッドを作成すると、ユーザー スレッドとカーネル スレッドの間に 1:1 のマッピングがあることが、さまざまな回答で言及されています。

Linux で使用する場合pthread_create()、1 つのユーザー スレッドと、それに対応する固有のカーネル スレッドが暗黙的に作成されるのではないでしょうか(つまり、合計 2 つのスレッドがあり、そのうちの 1 つはユーザーには見えません)。

また

作成されたカーネル スレッドは 1 つだけで、ユーザー スレッドと呼ばれる新しい Linux カーネルにはもう何もありませんか?

4

2 に答える 2

2

NPTL (ネイティブ POSIX スレッド ライブラリ) と古い LinuxThreads は両方とも 1:1 モデルを使用します。このモデルでは、ユーザーが作成した各スレッド (またはプロセス) がカーネル内の 1 つのスケジュール可能なエンティティに対応します。

ただし、ユーザーレベルのスレッドまたはファイバーによって混乱する可能性があります。これらは、のような呼び出しを介して作成された実行スレッドでmakecontext()ありswapcontext()、N:1 モデルを持ち、カーネルはユーザーレベルのスレッドを認識せず、それらのスケジューリングは user- で行われます。スペース。

于 2012-11-17T17:41:15.483 に答える
0

pthread_create() は内部的に fork() を呼び出し、vfork()/fork() は内部的に clone() を呼び出します。そのため、ほとんどの場合、1:1 マッピングです。

于 2013-02-10T15:33:58.690 に答える