2010-01-11 4 views

ответ

0

Размер стека нитей настраивается с использованием метода pthread_attr_setstack. Количество потоков imho ограничено только ресурсами, которые у вас есть, более 2K потоков работают в приложении, которое я знаю.

3

Максимальное количество потоков: Maximum number of threads per process in Linux?

размер стека:

Даже если pthread_attr_setstacksize() и pthread_attr_setstackaddr() теперь при условии, мы по-прежнему рекомендуем вам не использовать их, если вы на самом деле не имеют сильные причины для этого. Стратегия распределения стека по умолчанию для LinuxThreads практически оптимальна: стеки начинаются с малого (4k) и автоматически растут по требованию до довольно большого предела (2M). Более того, нет никакого портативного способа оценки требований к потоку потока, поэтому настройка размера стека делает вашу программу менее надежной и не переносной.

(от http://pauillac.inria.fr/~xleroy/linuxthreads/faq.html)

+1

LinuxThreads не поставляется с дистрибутивом Linux почти 7 лет. В частности, RHEL не отправил LinuxThreads с RHEL3. –

+0

@ Jörg. Согласовано. Я не мог найти лучшего документа. У вас есть ссылка? –

1

Существует не максимальное число потоков с помощью процесса.

Существует, однако, общая сумма активных потоков. Это значение может быть получено путем вводом:

cat /proc/sys/kernel/threads-max 

вы также можете изменить это значение:

echo 99999 > /proc/sys/kernel/threads-max 

Надеется, что это помогает.

1

Если вы на 32-битной машине, то стеки потоков будут потреблять адресное пространство в конце концов, в зависимости от размера, возможно, в < 10 000 потоков.

10k потоков, конечно, возможно, и некоторые люди запускают серверы производства с таким количеством, но вы действительно хотите быть уверены, что это лучший способ сделать то, что вы делаете.

Если вы думаете о том, что у вас есть потоки 10 тыс., У вас, вероятно, есть 64-битные машины, и много-много баранов.

+0

Размер стека по умолчанию для x86 равен 4KiBytes. С конфигурацией ядра 4G/4G можно теоретически запустить 2 ** 20 потоков (более 1 миллиона). Когда NPTL был впервые анонсирован, авторы фактически выполнили этот тест, и они превысили уровень ниже 900000. Вы можете легко запустить 100 000 потоков (занимает около 2 секунд), и система будет по-прежнему использоваться (в отличие от LinuxThreads, где начинается 100000 потоков более 15 минут и приводит к остановке системы). –

+0

Я работал над предположением, что для большинства приложений потребуется намного больше, чем 4k стека. – MarkR

+0

Это неверно, Йорг. На i686 glibc зарезервирует 10M на стек адресного пространства для каждого потока. Очевидно, что ни одна из этой памяти не выделяется, но она потребляет большой кусок доступного пространства для отображения, и вы исчерпаете это после нескольких сотен потоков. Запуск потоков 100k требует настройки параметра размера стека. Я подозреваю, что вы думали только о ядре, а не о glibc-реализации pthreads. –

Смежные вопросы