2012-03-19 11 views
2

Thread.yield()(Javaの)静的メソッドは、現在実行中のスレッドオブジェクトを一時的に一時停止させ、他のスレッドを実行させます。ハイパースレッディングCPUのThread.yield()

複数のスレッドが(ハイパースレッディング機能を備えたCPUで)実行されている場合、どのスレッドが一時停止しますか?あなたはHTについての誤解があるようだ

答えて

6

Thread.yieldと呼ばれる1 ...

5

は、HTは、ハードウェアによって処理されるが、OSによってスケジュールされるスレッドを必要としています。スレッドがCPUを生成すると、すぐにタイムスライスが停止し、OSは新しいスレッドをその場所(またはアイドルプロセス)に配置します。もう一方のスレッドは通常通り続行されます。

0

Javaの観点からは、ハイパースレッドCPU上のスレッドは、異なるコア上で実行されるスレッドと質的には異なります。 (彼らはちょうど遅いです...)

しかし、おそらくあなたは何を誤解しているでしょうyield。現在のスレッドを一時停止することは保証されません。むしろスレッドスケジューラが異なるスレッドを今すぐ実行するヒントにすぎません。

  • 他の実行可能スレッドがない場合、スケジューラは直ちに生成したスレッドをただちに続行します。

  • スケジューラは、ヒントを無視することにします。

あなたが/欲しい本当に一時停止し、現在のスレッドが必要な場合は、いくつかのイベントが発生するのを待っsleepまたはブロックを呼び出します。

関連する問題