Quel est le nombre maximum de threads qui peuvent être créés par un processus sous Linux ?
Comment (si possible) cette valeur peut-elle être modifiée ?
Quel est le nombre maximum de threads qui peuvent être créés par un processus sous Linux ?
Comment (si possible) cette valeur peut-elle être modifiée ?
Limite du nombre de threads : $ cat /proc/sys/kernel/threads-max
Comment il est calculé : max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE) ; et : la taille des pages x86_64 (PAGE_SIZE) est de 4K ; Comme toutes les autres architectures, x86_64 possède une pile noyau pour chaque thread actif. Ces piles de threads sont de taille THREAD_SIZE (2*PAGE_SIZE) ;
pour mempages : cat /proc/zoneinfo | grep spanned | awk '{totalpages=totalpages+$2} END {print totalpages}' ;
donc en fait le nombre n'est pas lié à la limitation de la taille de la pile mémoire des threads (ulimit -s). ps : la limitation de la pile mémoire des threads est de 10M dans ma VM rhel, et pour 1.5G de mémoire, cette VM ne peut se permettre que 150 threads ?
Cela ne devrait pas avoir d'importance. Vous obtiendrez de bien meilleures performances en concevant votre algorithme de manière à utiliser un nombre fixe de threads (par exemple, 4 ou 8 si vous avez 4 ou 8 processeurs). Vous pouvez le faire avec des files d'attente, des entrées-sorties asynchrones, ou quelque chose comme libevent.
Cela dépend de votre système, il suffit d'écrire un programme d'exemple [ en créant des processus dans une boucle ] et de vérifier en utilisant ps axo pid,ppid,rss,vsz,nlwp,cmd. Quand il ne peut plus créer de threads, vérifiez le nombre de nlwp [ nlwp est le nombre de threads ] et voilà, vous avez votre réponse infaillible au lieu de passer par des livres.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.