2010-01-11 6 views

Répondre

0

La taille de la pile de threads est configurable à l'aide de la méthode pthread_attr_setstack. La quantité de thread est limitée par les ressources que vous avez, plus de 2K threads fonctionnent dans une application que je connais.

3

Nombre maximum de fils: Maximum number of threads per process in Linux?

taille de la pile:

Même si pthread_attr_setstacksize() et pthread_attr_setstackaddr() sont maintenant fournis, nous recommandons toujours que vous ne les utilisez pas, sauf si vous avez vraiment fort raisons de le faire. La stratégie d'allocation de pile par défaut pour LinuxThreads est presque optimale: les piles commencent petit (4k) et augmentent automatiquement à la demande jusqu'à une limite assez importante (2M). De plus, il n'y a pas de moyen portable d'estimer les besoins en pile d'un thread, donc le réglage de la taille de la pile rend votre programme moins fiable et non portable.

(de http://pauillac.inria.fr/~xleroy/linuxthreads/faq.html)

+1

LinuxThreads n'est livré avec aucune distribution Linux depuis presque 7 ans maintenant. En particulier, RHEL n'a pas livré LinuxThreads depuis RHEL3. –

+0

@ Jörg. D'accord. Je n'ai pas pu trouver de meilleurs docs. avez vous un lien? –

1

Il n'y a pas un nombre maximal de threads par processus.

Il existe cependant une limite du nombre total de threads actifs. Cette valeur peut être récupérée en tapant:

cat /proc/sys/kernel/threads-max 

vous pouvez également modifier cette valeur:

echo 99999 > /proc/sys/kernel/threads-max 

Hope this helps.

1

Si vous êtes sur une machine 32 bits, les piles de threads consommeront l'espace d'adressage éventuellement, selon la taille, probablement à < 10.000 threads.

Les threads 10k sont certainement réalisables et certaines personnes exécutent des serveurs de production avec autant de ressources, mais vous voulez vraiment être sûr que c'est la meilleure façon de faire ce que vous faites.

Si vous envisagez d'avoir 10k threads, vous avez probablement des machines 64 bits de toute façon, et beaucoup, beaucoup de RAM.

+0

La taille de la pile de threads par défaut sur x86 est de 4 Ko/octets. Avec une configuration de noyau fractionnée 4G/4G, vous pouvez théoriquement démarrer 2 ** 20 threads (plus de 1 million). Lorsque NPTL a été annoncé pour la première fois, les auteurs ont exécuté ce test et ils ont atteint un maximum de 900000. Vous pouvez facilement démarrer 100 000 threads (environ 2 secondes) et le système sera toujours utilisable (contrairement à LinuxThreads, où 100 000 threads plus de 15 minutes et arrête le système). –

+0

Je travaillais sur l'hypothèse que la plupart des applications auraient besoin de beaucoup plus de 4k pile. – MarkR

+0

C'est incorrect, Jörg. Sur i686, la glibc réservera 10M par pile d'espace d'adressage pour chaque thread. Évidemment, aucune de ces mémoires n'est allouée, mais elle consomme un gros morceau de l'espace de mappage disponible et vous l'épuiserez après seulement quelques centaines de threads. Le démarrage de 100 000 threads nécessite l'ajustement du paramètre de taille de pile. Je suppose que vous pensiez uniquement au noyau, pas à l'implémentation glibc de pthreads. –