どのようにLinux上のpthreadは、スケジューラによって見られます
-
25-09-2019 - |
質問
私は、Linux上でのpthread実装に関する質問をしました。
プロセスは5つのスレッドを持っていると仮定します。 今どのようにスケジューラがこれらのスレッドを見ている(またはまったく参照does notの)ん。 例えばスケジューラが呼び出されると、それだけで、メインプロセスをスケジュールしません そしてそのスレッドのそれぞれとの間のスケジュールにメインプロセスのその責任。
またはそれは別個のプロセスであるかのようにそのスケジューラのスケジュールは、各スレッド、他の方法である。
解決
最近のLinux(NPTLのpthreadの実装)、スケジューラのスケジュールスレッドの場合、スレッドは、「軽量プロセス」とみなされます。 pthread_createのは clone
システムコールます。
他のヒント
Linuxのスケジュール、それはPTHREAD_SCOPE_SYSTEMとしてスコープを持つプロセスであるかのようにすべてのスレッド。 NPTL実装は、複数のCPUを利用することができます。
としてローガンは言った、すべてのスレッドが独立して予定されています。
しかし、あなたはあなたの代わりに、スレッドのスケジュールグループにLinuxのプロセス制御グループを使用することを望む場合ます。
プロセス制御グループは、スケジューリングがもう少し非効率的に、それははるかに公平であることができます。
非常に人気となっています。1つの用途は、TTYごとに対照群に各TTYによって作成されたプロセスとスレッドのすべてを置くことです。ユーザーのグラフィカルなアプリケーションのすべてで、この結果は、彼がターミナルウィンドウに発売することを彼の24スレッドのカーネルのコンパイルと同じレベルに予定されています。グラフィックアプリケーションでは、50%を取得し、コンパイルが50%を取得します。彼は別のターミナルウィンドウを開き、別の24個のスレッドでglibcのコンパイルを開始した場合、それは33%のデスクトップアプリケーションに移行し、33%のカーネルのコンパイルと33%glibcのコンパイルます。