Il nproc
il limite di cui parli si applica alle entità eseguibili , sta quindi limitando i thread (e quindi i processi che li contengono) . Ogni processo ha almeno un thread (il thread primario), in modo che solo i thread possano essere eseguiti . A rigor di termini, i processi non sono "eseguibili".
Questa risposta spiega la vera differenza tra thread e processi in Linux.
Ho testato il codice in daya risposta di (aggiunto anche sleep(1);
nel codice del thread) e diversamente da lui (?!), ho raggiunto il limite quando sono stati creati troppi thread:pthread_create()
stava restituendo EAGAIN
. Il pthread_create(3)
la documentazione dice quanto segue su questo errore:
ANCORA
Risorse insufficienti per creare un altro thread o è stato rilevato un limite imposto dal sistema sul numero di thread. Quest'ultimo caso può verificarsi in due modi:è stato raggiunto il limite di risorse software RLIMIT_NPROC (impostato viasetrlimit(2)), che limita il numero di processi per un ID utente reale; o è stato raggiunto il limite di sistema del kernel sul numero di thread, /proc/sys/kernel/threads-max.
Non vedo alcuna menzione di uno specifico limite per thread nel sorgente del kernel, vedo solo RLIMIT_NPROC
lì, che è il limite che puoi modificare in limits.conf
(con nproc
), ulimit -u
o setrlimit(2)
.