Возможно ли каким-либо образом изменить лимит на число pthreads, которое может создать процесс? В настоящее время на моей Linux-системе я могу создать около 380 потоков, но я хочу увеличить это, чтобы сказать, пока доступна память.Изменение предела максимального числа pthreads приложением
ответ
Посмотрите на это:
Maximum number of threads per process in Linux?
И смотреть на это, как это может относиться к вашему вопросу:
' кота?/proc/sys/kernel/threads-max' показывает '16384', но я не могу создать более 380 pthreads. Я даже попытался поместить пустую функцию как тело потоков. – Sukanto
какая ошибка у вас получается? –
после 380 потоков. Я получаю 'EAGAIN' в качестве возвращаемого значения' pthread_create() ', который согласно' pthread_create() 'man page is« Системе не хватало необходимых ресурсов для создания другого потока или системного ограничения на общее количество потоков в процессе {PTHREAD_THREADS_MAX} будет превышено. " – Sukanto
Ваша проблема заключается в том, что вы не вызвали pthread_detach на соответствующие темы. Это сообщает pthread, что ресурсы, связанные с каждым потоком, будут освобождены, когда поток завершится. Вы должны вызвать pthread_join или pthread_release для всех потоков, чтобы освободить ресурсы потоков. Это означает, что вам также нужно вызвать pthread_detach в обработчиках отмены pthread_join или утечке.
уменьшить размер штабеля пользователя 'ulimit -s 1024
';
default: 8MB
reduced: 1MB
увеличить количество потоков.
установить размер стека: pthread_attr_setstacksize(1024)
cat /proc/sys/kernel/threads-max
может работать в Linux, но не другие системы UNIX. Я думал, что правильный путь
Maximum number of threads per process - sysconf(_SC_THREAD_THREADS_MAX) failing
, который работает на некоторых системах UNIX (например, HPUX), но не на Solaris или Linux ...
Интересно ... вы рассмотрели некоторые из последствий таких Системный дизайн? Единственная точка отказа (SPOF) приходит на ум. – jldupont
Я не эксперт, но я бы поспорил, что более 380 потоков будут перегружать ваш процессор с помощью контекстных переключателей. Контекстное переключение для потока меньше, чем для отдельного процесса, но вам все равно нужно сохранить счетчик программ и зарегистрировать файл и, возможно, некоторые другие вещи, которые я забываю. Сколько потоков вы считаете нужным? Я бы предложил профилировать ваше приложение, чтобы определить поток накладных расходов для 10 потоков по сравнению с 100 потоками, а затем попытаться экстраполировать на целевое количество потоков. Вы можете обнаружить, что это не стоит усилий. Или, может быть, я просто ошибаюсь ... –
Я не буду использовать его практически нигде ... но мне нужно это для некоторых экспериментов? – Sukanto