Linux n'a pas de threads distincts par limite de processus, juste une limite sur le nombre total de processus sur le système (les threads ne sont essentiellement que des processus avec un espace d'adressage partagé sous Linux) que vous pouvez afficher comme ceci :
cat /proc/sys/kernel/threads-max
La valeur par défaut est le nombre de pages mémoire/4. Vous pouvez augmenter cela comme :
echo 100000 > /proc/sys/kernel/threads-max
Il existe également une limite au nombre de processus (et donc de threads) qu'un seul utilisateur peut créer, voir ulimit/getrlimit
pour plus de détails concernant ces limites.
C'est FAUX de dire que LINUX n'a pas de threads séparés par limite de processus.
Linux implémente indirectement le nombre maximum de threads par processus !!
number of threads = total virtual memory / (stack size*1024*1024)
Ainsi, le nombre de threads par processus peut être augmenté en augmentant la mémoire virtuelle totale ou en diminuant la taille de la pile. Cependant, une trop grande diminution de la taille de la pile peut entraîner une défaillance du code en raison d'un débordement de la pile alors que la mémoire virtuelle maximale est égale à la mémoire d'échange.
Vérifiez votre machine :
Mémoire virtuelle totale :ulimit -v
(la valeur par défaut est illimitée, vous devez donc augmenter la mémoire d'échange pour l'augmenter)
Taille totale de la pile :ulimit -s
(la valeur par défaut est de 8 Mo)
Commande pour augmenter ces valeurs :
ulimit -s newvalue
ulimit -v newvalue
*Remplacez la nouvelle valeur par la valeur que vous souhaitez définir comme limite.
Références :
http://dustycodes.wordpress.com/2012/02/09/increasing-number-of-threads-per-process/
En termes pratiques, la limite est généralement déterminée par l'espace de la pile. Si chaque thread obtient une pile de 1 Mo (je ne me souviens pas si c'est la valeur par défaut sous Linux), alors un système 32 bits manquera d'espace d'adressage après 3000 threads (en supposant que le dernier Go est réservé au noyau) .
Cependant, vous rencontrerez très probablement des performances médiocres si vous utilisez plus de quelques dizaines de threads. Tôt ou tard, vous obtenez trop de surcharge de changement de contexte, trop de surcharge dans le planificateur, etc. (Créer un grand nombre de threads ne fait guère plus que consommer beaucoup de mémoire. Mais beaucoup de threads avec du travail réel faire va vous ralentir car ils se battent pour le temps CPU disponible)
Que faites-vous là où cette limite est même pertinente ?