2013-12-19 6 views
3

Я правильно понял, что если у вас есть, например, четыре процессора и четыре потока, они распределяются по каждому процессору? И когда у вас есть пять потоков, один процессор должен обрабатывать сразу два потока?Как обрабатываются потоки?

Заранее спасибо :)

+0

Теоретически, да. На практике у вас может быть один процессор, в котором есть все потоки, назначенные ему, несколько процессоров, у которых есть несколько потоков, а другие - нет ... или любая комбинация между ними. –

+5

Нет гарантий. Ваша операционная система может делать все, что захочет, с помощью ваших потоков. –

+1

Темы не обязательно моделируют параллелизм: они моделируют * логический * параллелизм, а не * фактический * параллелизм. Когда у вас несколько потоков, вы указываете ОС, что у вас есть вещи, которые вы хотите делать одновременно (логически). Он может принять эти инструкции и попытаться запустить их, разбив их на разные процессоры. Но некоторые процессоры могут также делать такие вещи, как если операция завершится 10 циклов, запустите ее и выполните операцию из другого потока во время его запуска («hyperthreading»). Или глухая система может запустить 1 поток до завершения, прежде чем начинать работу над следующим. – IdeaHat

ответ

2

Единственная гарантия вы получаете, что потоки будут работать независимо друг от друга. Планирование выполняется операционной системой, и ОС обычно пытается сделать все ядра занятыми, но поскольку на вашем компьютере работает намного больше, чем только ваша программа, нет никакой гарантии, что ваши четыре потока будут всегда работать на четырех ядрах.

В Windows вы можете привязывать потоки к ядру процессора, но это не стандартная и кросс-платформенная, и не всегда в интересах вашей программы.

+1

* и ОС обычно пытается сделать все ядра занятыми *: зависит, на ноутбуке в «экономичном» режиме было бы расточительно разбудить ядро ​​всего за пару инструкций. –

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