Потоки и сродство процессора - PullRequest
2 голосов
/ 31 января 2011

Допустим, на машине установлено два процессора. Поток A работает на P1, а поток B работает на P2.

Тема А звонит Sleep(10000);

Возможно ли, что когда поток A снова начинает выполняться, он запускается на P2?

Если да, кто решит этот переход? Если нет, то почему?

Сохраняет ли Processor какие-либо данные о том, какие потоки он выполняет, или операционная система привязывает каждый поток к процессору в течение всего срока его службы?

Ответы [ 4 ]

1 голос
/ 31 января 2011

Это возможно.Это будет определяться планировщиком процесса операционной системы и может также зависеть от приложения, которое работает.Никакая информация о ранее запущенных потоках не сохраняется процессором, кроме того, что находится в кэше.

0 голосов
/ 31 января 2011

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

0 голосов
/ 31 января 2011

Да, это возможно. Хотя в конечном итоге поток наследует свой ЦП (или ядро ​​ЦП) от процесса (исполняемого файла). В операционных системах, на каком ЦП или ядре ЦП процесс выполняется для своих текущих квантов (временного интервала), определяется планировщиком:

http://en.wikipedia.org/wiki/Scheduling_(computing)

-Oisin

0 голосов
/ 31 января 2011

Это зависит от многих вещей, оно ведет себя по-разному в зависимости от конкретной операционной системы.См. Также: Сродство процессора и Алгоритмы планирования .В Windows вы можете прикрепить конкретный процесс к ядру процессора через диспетчер задач.

...