2012-03-19 3 views
2

Статический метод Thread.yield() (на Java) заставляет временно исполняемый объект потока временно приостановить и разрешить выполнение других потоков.Thread.yield() в процессоре Hyperthreading

Если выполняется несколько потоков (в процессоре с функцией гиперпотока), какой поток будет приостановлен?

ответ

6

Тот, который называется Thread.yield ...

5

Вы, кажется, имеют неправильное представление о HT, HT обрабатывается аппаратными средствами, но требует нить планироваться ОС. Если поток дает процессор, он немедленно останавливает свой временной интервал, и ОС поместит на место новый поток (или процесс простоя). Другой поток будет продолжаться как обычно.

0

С точки зрения Java потоки на гиперпроцессовом процессоре качественно не отличаются от потоков, работающих на разных ядрах. (Они только медленнее ...)

Однако, возможно, вы, вероятно, не понимаете, что делает yield. Это не гарантирует приостановку текущего потока. Скорее всего, это лишь намек на планировщик потоков для запуска другого потока.

  • Если нет другой текучей нити, тогда планировщик немедленно продолжит поток, который только что дал.

  • Планировщик может принять решение игнорировать подсказку.

Если вы хотите/нужно текущий поток действительно пауза, вызов sleep или блок ждет некоторое событие произойдет.

Смежные вопросы