5

Linuxでのpthreadの実装について質問があります。

プロセスに5つのスレッドがあるとします。ここで、スケジューラーはこれらのスレッドをどのように認識しますか(またはまったく認識しません)。たとえば、スケジューラーが呼び出されると、メインプロセスのみをスケジュールし、次に各スレッド間でスケジュールするメインプロセスの責任を果たしますか。

または、その逆の場合、スケジューラーは各スレッドを個別のプロセスであるかのようにスケジュールします。

4

3 に答える 3

7

最新のLinux(NPTL pthread実装)の場合、スケジューラーはスレッドをスケジュールします。スレッドは「軽量プロセス」と見なされます。pthread_createは、cloneシステムコールの観点から実装されています。

于 2010-10-23T15:24:51.013 に答える
2

Linuxは、スコープがPTHREAD_SCOPE_SYSTEMのプロセスであるかのように、すべてのスレッドをスケジュールします。nptl実装は、複数のCPUを利用できます。

于 2010-10-23T15:32:31.800 に答える
1

Loganが言ったように、すべてのスレッドは独立してスケジュールされます。

ただし、必要に応じて、Linuxプロセス制御グループを使用してスレッドのグループをスケジュールすることもできます。

プロセス制御グループは、スケジューリングを少し非効率的にしますが、はるかに公平になる可能性があります。

非常に人気のある用途の1つは、各TTYによって作成されたすべてのプロセスとスレッドをTTYごとのコントロールグループに入れることです。これにより、ユーザーのすべてのグラフィカルアプリケーションは、ターミナルウィンドウで起動した24スレッドのカーネルコンパイルと同じレベルでスケジュールされます。グラフィックアプリケーションは50%を取得し、コンパイルは50%を取得します。彼が別のターミナルウィンドウを開き、別の24スレッドでglibcのコンパイルを開始すると、33%のデスクトップアプリケーション、33%のカーネルコンパイル、33%のglibcコンパイルに移行します。

于 2011-11-04T22:44:07.533 に答える