Как узнать количество доступных потоков?

Рейтинг: 0Ответов: 1Опубликовано: 14.11.2014

Собственно, заголовок вопроса практически описывает весь вопрос.

Добавлю только то, что пишу я учебную программу на С++ под линукс.

Ответы

▲ 2Принят

Я знаю один способ - создавать их в цикле до тех пор, пока оно создается. Под 32-разрядными системами обычно их получается сильно меньше. Вот есть готовые сорцы.

У меня выводит 485 потоков (16 гиг оперативы, i7 процессор).

Но если сделать

ulimit -u 4096
ulimit -s 512

то количество тредов сразу подымается до 3557.

Обновление

Можно только сделать оценку, но точное количество не посчитать - слишком много факторов.

В целом, для каждого приложения в 32-битной системе доступно 4Гб памяти. Но по факту - 2 (или 3)Гб. Так как каждый поток при создании получает мегабайтный стек, то больше 2000-3000 потоков создать невозможно. На практике это около 300-400, так как нужны накладные расходы на создание потоков.

Я задал параметр -u, который как раз и определяет максимальное количество процессов в системе. Вычитая с него текущее количество процессов в системе, можно оценить максимальное - количество создаваемых потоков.