The nproc
limit, o kterém mluvíte, platí pro spustitelné entity , omezuje tedy vlákna (a tedy procesy, které je obsahují) . Každý proces má alespoň jedno vlákno (primární vlákno), takže lze spouštět pouze vlákna . Přísně vzato, procesy nejsou „běžitelné“.
Tato odpověď vysvětluje skutečný rozdíl mezi vlákny a procesy v Linuxu.
Testoval jsem kód v daya odpověď uživatele (přidáno také sleep(1);
v kódu vlákna) a na rozdíl od něj (?!) jsem narazil na limit, když bylo vytvořeno příliš mnoho vláken:pthread_create()
vracel EAGAIN
. pthread_create(3)
dokumentace o této chybě říká následující:
ZNOVU
Nedostatek zdrojů k vytvoření dalšího vlákna nebo systémový limit počtu vláken. Druhý případ se může vyskytnout dvěma způsoby:bylo dosaženo limitu měkkých zdrojů RLIMIT_NPROC (nastavení viasetrlimit(2)), který omezuje počet procesů pro skutečné ID uživatele; nebo bylo dosaženo celosystémového limitu jádra na počet vláken /proc/sys/kernel/threads-max.
Nevidím žádnou zmínku o konkrétním limit na vlákno ve zdrojovém kódu jádra, vidím pouze RLIMIT_NPROC
tam, což je limit, který můžete změnit v limits.conf
(s nproc
), ulimit -u
nebo setrlimit(2)
.