Максимально доступных потоков в системе Windows? C ++ - PullRequest
1 голос
/ 05 апреля 2020

Какой код на C ++ используется для получения максимального числа доступных потоков в системе?

Ответы [ 2 ]

4 голосов
/ 05 апреля 2020

C ++ не имеет понятия максимального количества потоков.

Он имеет концепцию потока, который не может быть создан путем повышения std::system_error. Это может происходить по ряду причин, включая вашу ОС, решившую, что она больше не хочет порождать потоки - либо потому, что вы установили жесткое или мягкое ограничение на количество потоков, либо потому, что она на самом деле не может создать поток, если она этого хочет (например, ваше адресное пространство используется).

Фактический предел должен запрашиваться способом, определяемым ОС c, вне стандарта C ++. Например, в Linux можно запросить /proc/sys/kernel/threads-max и любой соответствующий ulimit и вычислить возможный лимит.

В Windows нет запрашиваемого ограничения, и вы ограничены адресным пространством. См., Например, «Имеет ли Windows ограничение в 2000 потоков на процесс?» , исследующее это ограничение.

Причина, по которой системы не делают этот запрос тривиальным, заключается в том, что он не должен дело. Вы быстро исчерпаете свои полезные ядра задолго до того, как достигнете практического предела количества потоков. Не делай так много тем!

1 голос
/ 05 апреля 2020

std::thread::hardware_concurrency()

  • Возвращает количество контекстов аппаратного потока. Если это значение не вычислимо или не определено должным образом, реализация должна вернуть 0.

Однако вы можете создать гораздо больше объектов std::thread, но только это много потоков будет выполняться параллельно в любое время.

Для OpenMP (OMP) у вас также есть omp_get_max_threads()

  • Возвращает целое число, которое равно или превышает количество потоков, которые будут доступны если в этой точке кода определена параллельная область без num_threads .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...