У меня есть программа на C++, которая порождает процессы. Пользователь сообщает мне, сколько ядер мы должны работать, и сколько задач они хотели бы запустить.Установка ограничения на количество процессов, которые может вызвать моя программа
Скажите, что пользователь говорит мне, что у них есть 8 ядер для работы, и им нужно выполнить 20 наших задач. Затем я запускаю 8 задач изначально, и по мере того как каждый из них заканчивается, я создаю новую задачу, пока мы не закончим 20 задач.
Моя программа работает с Windows (MSVC 11) и Linux (GCC 4.8), поэтому реализации различаются для этих платформ, но в целом я использую семафоры для отслеживания порожденных процессов.
Мой вопрос: какой разумный способ ограничить количество ядер, которые может использовать пользователь? Я хотел бы сделать ошибку в начале программы, если пользователь сообщает нам о некотором количестве ядер, с которыми невозможно работать. Но я не уверен, как получить конкретное число, поскольку оно зависит от машины пользователя и платформы.
Например, я знаю, что для Windows, я использую WaitForMultipleObjects()
и поэтому я ограничен MAXIMUM_WAIT_OBJECTS
= 64 процессов, я могу ждать (см here). Но есть ли что-то подобное для Linux? Или даже другие «gotchas», подобные этому в Windows?
Я думаю, что я ищу некоторые стандартные рекомендации по настройке такого предела.
Спасибо.
[This] (http://stackoverflow.com/questions/150355/programmatically-find-the-number-of-cores-on-a-machine) может быть полезным. – lcs
@cocarin: спасибо, это очень полезно для расчета количества доступных сердечников. Тем не менее, я не уверен, что могу просто взять количество ядер в качестве предела ... например, если у пользователя есть 128 ядер на своей Windows-машине, они все равно не смогут использовать их все из-за ограничения из 64 процессов, которые мы можем ждать. –