Вернуться




Как узнать максимальное количество потоков на процесс в Linux?



Какое максимальное количество потоков может быть создано процессом в Linux?

Как (если возможно) можно изменить это значение?

 

Ответ 1

В Linux нет отдельного ограничения потоков для каждого процесса, только ограничение на общее количество процессов в системе (потоки это, по сути, просто процессы с общим адресным пространством в Linux), которые вы можете просмотреть следующим образом:

cat /proc/sys/kernel/threads-max

 

По умолчанию это количество страниц памяти/4. Это значение можно увеличить так:

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

 

Также существует ограничение на количество процессов (и, следовательно, потоков), которые может создать один пользователь.

 

Ответ 2

НЕПРАВИЛЬНО утверждать, что в LINUX нет отдельных потоков для каждого процесса.

Linux косвенно реализует максимальное количество потоков на процесс !!!

number of threads = total virtual memory / (stack size*1024*1024)

 

Таким образом, количество потоков на процесс можно увеличить, увеличив общую виртуальную память или уменьшив размер стека. Но слишком большое уменьшение размера стека может привести к сбою кода из-за переполнения стека, в то время как максимальная виртуальная память равна размеру памяти подкачки.

Общая виртуальная память: ulimit -v (по умолчанию не ограничено, поэтому вам нужно увеличить память подкачки, чтобы увеличить это значение).

Общий размер стека: ulimit -s (по умолчанию 8 Мб).

Команда для увеличения этих значений:

ulimit -s newvalue

 

ulimit -v newvalue

 

* Замените новое значение значением, которое вы хотите установить в качестве ограничения.

 

Ответ 3

На практике предел обычно определяется размером стека. Если каждый поток получает стек размером 1 Мб, тогда у вас в 32-разрядной системе адресное пространство закончится после 3000 потоков (при условии, что последний Гб зарезервирован для ядра).

Рано или поздно вы получите слишком много накладных расходов на переключение контекста, слишком много накладных расходов в планировщике и т. д. (Создание большого количества потоков создает много накладных расходов. Но множество потоков с реальной работой тормозит производительность, поскольку они борются за доступное время процессора).

 

Ответ 4

Linux не использует виртуальную память для вычисления максимального количества потоков, а только физическую память, установленную в системе.

 max_threads = totalram_pages / (8 * 8192 / 4096);

 

ядро/fork.c

/* Максимальное количество потоков по умолчанию установлено в безопасное значение.

 * значение структуры потоков могут занимать не более половины памяти.

 */

max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);

 

Таким образом, максимальный поток различается для каждой системы, потому что установленная оперативная память может быть разного размера, поэтому Linux не нужно увеличивать виртуальную память, потому что на 32-битной версии у нас есть 3 Гб для пользовательского пространства и 1 Гбдля ядра, на 64-битной версии мы получили 128 Тб виртуальной памяти, что и происходит в Solaris. Если вы хотите увеличить виртуальную память, вам нужно добавить объем подкачки.



Если вам понравилась эта статья поделитесь ею с друзьями, тем самым вы помогаете нам развиваться и добавлять всё больше интересного и полезного контента!




Cхожие статьи





Команды Linux. Шпаргалка

Команды Linux. Шпаргалка

Я часто забываю команды терминала и обычно сохраняю их себе на компьютер в ...

21 Февраля 2021    Linux

Переход с Windows на Linux

Переход с Windows на Linux

После того как Microsoft перестали поддерживать Windows 7, а после и вовсе ...

21 Февраля 2021    Linux

REOS. Игровой Linux

REOS. Игровой Linux

Еще несколько лет назад Linux считался не более, чем операционной системой ...

21 Февраля 2021    Linux



Напишем