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) .