В Linux максимальное количество потоков определяется как max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);
, и его можно получить, вызвав cat /proc/sys/kernel/threads-max
.Это возвращает около 14 000 для моего Raspberry Pi 3. Однако, когда я просто создаю потоки в цикле с pthread_create()
(которые пусты), я могу создать только 250, прежде чем я получу ENOMEM (Cannot allocate memory)
.
Теперь я посмотрел на стек по умолчанию, который выделен для процесса или потока, и это 8192k.Таким образом, около 250 потоков я бы использовал 2 ГБ памяти.Однако, на мой взгляд, это также не складывается, потому что вызов free -m
показывает, что я получил всего 1 ГБ памяти.
Поскольку у меня есть 1 ГБ оперативной памяти, я ожидал, что смогу создать только 125Максимальное количество потоков: не 250 и не 14000.
Почему я могу создать 250 потоков?