Est-il possible de modifier la limite du nombre de pthreads qu'un processus peut créer? Actuellement sur mon système Linux, je peux créer environ 380 threads mais je veux augmenter cela pour dire tant que la mémoire est disponible.Modification de la limite du nombre maximal de pthreads par une application
Répondre
Regardez ceci:
Maximum number of threads per process in Linux?
Et un coup d'oeil à ce qu'il pourrait se rapporter à votre question:
' cat?/proc/sys/kernel/threads-max' montre '16384' Mais je ne peux pas créer plus de 380 pthreads, j'ai même essayé de mettre une fonction vide dans le corps des threads – Sukanto
quelle erreur obtenez-vous? –
après 380 threads je reçois 'EAGAIN' comme valeur de retour de' pthread_create() ', qui selon la page de manuel' pthread_create() 'est" Le système n'a pas les ressources nécessaires pour créer un autre thread, ou la limite imposée par le système le nombre total de threads dans un processus {PTHREAD_THREADS_MAX} serait dépassé. " – Sukanto
Votre problème est que vous ne l'avez pas appelé pthread_detach sur les discussions en question. Cela indique à pthread que les ressources associées à chaque thread seront libérées lorsque le thread se terminera. Vous devez appeler pthread_join ou pthread_release sur tous les threads pour libérer les ressources de thread. Cela signifie que vous devez également appeler pthread_detach dans vos gestionnaires d'annulation pthread_join ou une fuite.
réduire la taille de la pile de l'utilisateur '';
default: 8MB
reduced: 1MB
pour augmenter le nombre de threads.
définir la taille de la pile: pthread_attr_setstacksize(1024)
cat /proc/sys/kernel/threads-max
peut fonctionner dans les systèmes Linux, mais pas d'autres UNIX. Je pensais que la bonne façon est
Maximum number of threads per process - sysconf(_SC_THREAD_THREADS_MAX) failing
qui fonctionne sur certains systèmes UNIX (comme HPUX) mais pas sur Solaris ou Linux ...
Intéressant ... avez-vous pensé quelques-unes des conséquences de cette conception du système? Le point unique de défaillance (SPOF) vient à l'esprit. – jldupont
Je ne suis pas un expert, mais je parie que le fait d'avoir plus de 380 threads submergera votre processeur de commutateurs de contexte. Le changement de contexte pour un thread est moins important que pour un processus séparé, mais vous devez quand même enregistrer le compteur de programme et le fichier de registre et peut-être d'autres choses que j'oublie. De combien de fils pensez-vous avoir besoin? Je suggérerais de profiler votre application pour déterminer la surcharge du thread pour 10 threads par rapport à 100 threads, puis essayez d'extrapoler à votre nombre cible de threads. Vous pouvez trouver que cela finit par ne pas valoir l'effort. Ou peut-être que je me trompe ... –
Je ne l'utiliserai pratiquement pas n'importe où ... mais j'en ai besoin pour quelques expériences? – Sukanto