Der nproc
Limit, von dem Sie sprechen, gilt für ausführbare Entitäten , es beschränkt somit Threads (und damit Prozesse, die sie enthalten) . Jeder Prozess hat mindestens einen Thread (den primären Thread), sodass nur Threads ausgeführt werden können . Prozesse sind streng genommen nicht "lauffähig".
Diese Antwort erklärt den wirklichen Unterschied zwischen Threads und Prozessen in Linux.
Ich habe den Code in daya getestet Antwort von (auch sleep(1);
hinzugefügt im Thread-Code) und im Gegensatz zu ihm (?!) stieß ich an die Grenze, als zu viele Threads erstellt wurden:pthread_create()
gab EAGAIN
zurück . Die pthread_create(3)
Dokumentation sagt folgendes über diesen Fehler:
NOCHMAL
Unzureichende Ressourcen zum Erstellen eines weiteren Threads, oder es wurde eine vom System auferlegte Begrenzung der Anzahl der Threads festgestellt. Der letztere Fall kann auf zwei Arten auftreten:Die weiche Ressourcengrenze RLIMIT_NPROC (über setrlimit(2) gesetzt), die die Anzahl der Prozesse für eine echte Benutzer-ID begrenzt, wurde erreicht; oder das systemweite Limit des Kernels für die Anzahl der Threads, /proc/sys/kernel/threads-max, wurde erreicht.
Ich sehe keine Erwähnung eines spezifischen Per-Thread-Limit in der Kernel-Quelle sehe ich nur RLIMIT_NPROC
dort, das ist das Limit, das Sie in limits.conf
ändern können (mit nproc
), ulimit -u
oder setrlimit(2)
.