O nproc
limite ao qual você está se referindo se aplica a entidades executáveis , portanto, limita os encadeamentos (e, portanto, os processos que os contêm) . Todo processo tem pelo menos um thread (o thread primário), de forma que somente threads podem ser run . Estritamente falando, os processos não são "executáveis".
Esta resposta explica a diferença real entre os segmentos e processos no Linux.
Eu testei o código na resposta do daya (também adicionei sleep(1);
no código da thread) e ao contrário dele (?!), eu atingi o limite quando muitos threads foram criados: pthread_create()
estava retornando EAGAIN
. A documentação de pthread_create(3)
diz o seguinte sobre esse erro:
EAGAIN
Insufficient resources to create another thread, or a system-imposed limit on the number of threads was encountered. The latter case may occur in two ways: the RLIMIT_NPROC soft resource limit (set via setrlimit(2)), which limits the number of process for a real user ID, was reached; or the kernel's system-wide limit on the number of threads, /proc/sys/kernel/threads-max, was reached.
Não vejo menção a um limite específico por thread no origem do kernel , vejo apenas RLIMIT_NPROC
lá, que é o limite que você pode alterar em limits.conf
(com nproc
), ulimit -u
ou setrlimit(2)
.