Как узнать количество доступных потоков?
Собственно, заголовок вопроса практически описывает весь вопрос.
Добавлю только то, что пишу я учебную программу на С++ под линукс.
Собственно, заголовок вопроса практически описывает весь вопрос.
Добавлю только то, что пишу я учебную программу на С++ под линукс.
Я знаю один способ - создавать их в цикле до тех пор, пока оно создается. Под 32-разрядными системами обычно их получается сильно меньше. Вот есть готовые сорцы.
У меня выводит 485 потоков (16 гиг оперативы, i7 процессор).
Но если сделать
ulimit -u 4096
ulimit -s 512
то количество тредов сразу подымается до 3557.
Обновление
Можно только сделать оценку, но точное количество не посчитать - слишком много факторов.
В целом, для каждого приложения в 32-битной системе доступно 4Гб памяти. Но по факту - 2 (или 3)Гб. Так как каждый поток при создании получает мегабайтный стек, то больше 2000-3000 потоков создать невозможно. На практике это около 300-400, так как нужны накладные расходы на создание потоков.
Я задал параметр -u
, который как раз и определяет максимальное количество процессов в системе. Вычитая с него текущее количество процессов в системе, можно оценить максимальное - количество создаваемых потоков.