деление потока с ++ на микропроцессор - PullRequest
2 голосов
/ 16 ноября 2010

У меня есть вопрос ... Мне нужно создать многопоточное приложение, и мой вопрос: если у меня процессор 2cpu, автоматически ли мои 2 потока отдельно по процессору?и если у меня есть 4 потока, и мой компьютер имеет 4 процессора, снова 1 на процессор?и если у меня 4 процессора и 2 процессора, как делится ??

заранее спасибо

Ответы [ 3 ]

7 голосов
/ 16 ноября 2010

На самом деле это не тот вопрос, на который можно ответить, если вы не укажете операционную систему как минимум.

Сам C ++ ничего не знает о потоках, они являются службой, предоставляемой ОС для среды выполнения, и зависят от этой ОС в своей реализации.

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

Некоторые ОС 'позволяют вам указывать сходство потоков, способность потоков (а иногда и групп потоков) придерживаться одного ЦП, но, опять же, это проблема ОС, а не С ++.

Для Windows (согласно вашему комментарию) вы можете прочитать это введение . Windows предоставляет SetProcessAffinityMask() функцию для контроля сходства всех потоков в данном процессе или SetThreadAffinityMask() для независимого управления потоками.

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

4 голосов
/ 16 ноября 2010

Распределение потоков между процессорами зависит от ОС, в которой работает ваше приложение.Как правило, большинство ОС не дают никаких гарантий относительно того, как ваши потоки распределены по процессорам, хотя некоторые имеют некоторые низкоуровневые API, позволяющие вам указывать сходство потоков.

2 голосов
/ 16 ноября 2010

Если ваши потоки связаны с процессором, то они, безусловно, будут планироваться на всех доступных процессорах.

Если ваши потоки связаны с вводом-выводом, то если у вас только один поток на процессор, большинство процессоровбудет сидеть без дела.Вот почему - при попытке максимизировать производительность - важно измерить происходящее и либо найти жестко запрограммированное соотношение потоков на процессор, либо использовать механизм пула потоков операционной системы, который имеет доступ к достаточному количеству информации, чтобы сохранить ровно столько потоковактивен, так как есть ядра ЦП.

Как правило, вы не хотите иметь БОЛЕЕ активных потоков, которые ЦП (то есть потоки, которые не заблокированы в ожидании завершения ввода-вывода), как это делает процесс переключения между активными потоками на ЦП.понести небольшую стоимость, которая может сложиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...