Thread.yield()
(Javaの)静的メソッドは、現在実行中のスレッドオブジェクトを一時的に一時停止させ、他のスレッドを実行させます。ハイパースレッディングCPUのThread.yield()
複数のスレッドが(ハイパースレッディング機能を備えたCPUで)実行されている場合、どのスレッドが一時停止しますか?あなたはHTについての誤解があるようだ
Thread.yield()
(Javaの)静的メソッドは、現在実行中のスレッドオブジェクトを一時的に一時停止させ、他のスレッドを実行させます。ハイパースレッディングCPUのThread.yield()
複数のスレッドが(ハイパースレッディング機能を備えたCPUで)実行されている場合、どのスレッドが一時停止しますか?あなたはHTについての誤解があるようだ
Thread.yield
と呼ばれる1 ...
は、HTは、ハードウェアによって処理されるが、OSによってスケジュールされるスレッドを必要としています。スレッドがCPUを生成すると、すぐにタイムスライスが停止し、OSは新しいスレッドをその場所(またはアイドルプロセス)に配置します。もう一方のスレッドは通常通り続行されます。
Javaの観点からは、ハイパースレッドCPU上のスレッドは、異なるコア上で実行されるスレッドと質的には異なります。 (彼らはちょうど遅いです...)
しかし、おそらくあなたは何を誤解しているでしょうyield
。現在のスレッドを一時停止することは保証されません。むしろスレッドスケジューラが異なるスレッドを今すぐ実行するヒントにすぎません。
他の実行可能スレッドがない場合、スケジューラは直ちに生成したスレッドをただちに続行します。
スケジューラは、ヒントを無視することにします。
あなたが/欲しい本当に一時停止し、現在のスレッドが必要な場合は、いくつかのイベントが発生するのを待っsleep
またはブロックを呼び出します。