Le nproc
la limite dont vous parlez s'applique aux entités exécutables , il limite donc les threads (et donc les processus les contenant) . Chaque processus a au moins un thread (le thread principal), de sorte que seuls les threads peuvent être exécutés . À proprement parler, les processus ne sont pas "exécutables".
Cette réponse explique la vraie différence entre les threads et les processus sous Linux.
J'ai testé le code dans daya la réponse de (également ajouté sleep(1);
dans le code du thread) et contrairement à lui (?!), j'ai atteint la limite lorsque trop de threads étaient créés :pthread_create()
renvoyait EAGAIN
. Le pthread_create(3)
la documentation indique ce qui suit à propos de cette erreur :
ENCORE
Ressources insuffisantes pour créer un autre thread, ou une limite imposée par le système sur le nombre de threads a été rencontrée. Ce dernier cas peut se produire de deux manières :la limite de ressource logicielle RLIMIT_NPROC (définie via setrlimit(2)), qui limite le nombre de processus pour un ID utilisateur réel, a été atteinte; ou la limite système du noyau sur le nombre de threads, /proc/sys/kernel/threads-max, a été atteinte.
Je ne vois aucune mention d'un spécifique limite par thread dans la source du noyau, je ne vois que RLIMIT_NPROC
là, quelle est la limite que vous pouvez changer dans limits.conf
(avec nproc
), ulimit -u
ou setrlimit(2)
.