POSIX XSH 2.8.4 Process Schedulingは、スレッドおよびプロセスのスケジューリング属性の動作を定義します。sched_*
インターフェイスは、スレッドではなく、プロセスのスケジューリング プロパティに影響を与えるように指定されています。これは、次の節で明確にされています。
POSIX モデルは、「プロセス」をシステム リソースの集合体として扱います。これには、オペレーティング システムが制御するプロセッサ上でスケジュールされる可能性がある 1 つまたは複数のスレッドが含まれます。プロセスには独自のスケジューリング属性のセットがありますが、これらは、以下で説明するように、個々のスレッドのスケジューリング動作に間接的な影響を与えます (存在する場合)。
と
システム スケジューリング競合スコープを持つスレッドの場合、プロセス スケジューリング属性は、スレッドまたはそのスレッド専用の基になるカーネル スケジューリング エンティティのスケジューリング属性または動作に影響を与えません。
私がこれを読んだのは、「システム スケジューリング コンテンション スコープ」のみがサポートされているシステム (Linux/glibc はそのようなシステムです) では、sched_*
関数はまったく目に見える影響を与えるべきではないということです。
sched_*
これは、特定のスレッドのスケジューリング属性を設定するLinux/glibc での現在の動作の現実に反しています。
一般的にこの状況をよりよく理解したいということとは別に、次の重要な質問があると思います。
この不一致の根拠を示す文書はありますか?
標準の私の読みは正しいですか?特に、単一スレッド アプリケーション (メイン スレッドがデフォルトのスケジューリング ポリシーを使用しており、変更できないシステム競合スコープを使用している場合) では、 and が影響を与えないように指定されていることは
sched_setparam
、私には本当に驚くべきことです。sched_setscheduler
標準の
sched_*
機能の有用性は何ですか? それらはほとんどの実装に影響を与えず、プロセス競合スコープをサポートする実装にも最小限の影響しかないように思えます。誰かがそれらの使用目的を説明できますか?