2

オペレーティング システムがスレッドの使用方法の特性を理解する利点はありますか? たとえば、新しいスレッドを作成するときに、集中的な CPU 計算に使用され、I/O でブロックされることを示す方法が Java にあるとしたらどうなるでしょうか。これが機能であれば、スレッドのスケジューリングは改善されないでしょうか?

4

4 に答える 4

3

スレッドがI/Oまたは計算であるという情報をOSが実際に何をすることを期待しているのかわかりません。スレッドのスケジュール方法に実際に最も大きな違いをもたらすもの (つまり、スレッドの優先順位とスレッドの CPU アフィニティ) は、API によって既に公開されています (また、主流の OS API にも NUMA の側面のサポートが現れ始めています)。

「計算スレッド」とは、それがバックグラウンド処理を行っているものであり、(アプリの応答性を維持するという観点から) GUI スレッドほど重要ではないことを意味する場合、おそらく実行できる最も有用なことは、計算スレッドの優先順位を少し下げることです。 .

于 2009-04-10T21:09:49.940 に答える
3

それは、OS プロセスが行うことです。OS には、プロセスの高度なスケジューリング機能があります。OS は I/O の使用と CPU の使用を追跡し、優先度を動的に調整して、CPU を集中的に使用する処理が I/O に干渉しないようにします。

これらの機能が必要な場合は、適切な OS プロセスを使用してください。

于 2009-04-10T20:31:42.807 に答える
1

はい、特にウィンドウで多くのスレッドを開くのが好きなアーキテクトの 1 人である場合は、それらを特に理解することが非常に重要です。

Wintellect の Jeff Richter には、 PowerThreadingというライブラリがあります。.NET でアプリケーションを開発している場合は非常に便利ですが、JAVA について話しているので、OS スレッド、カーネル モデル、および割り込みのしくみを理解しておくことをお勧めします。

于 2009-04-10T21:13:47.917 に答える
1

それも必要ですか?I/O でスレッドがブロックされると、CPU を集中的に使用するスレッドが実行されます。オペレーティング システムは、スレッドのスケジュール方法を決定します。私の知る限り、Javaでヒントを与える方法はありません。

于 2009-04-10T20:32:06.427 に答える