Problèmes de Création de Threads Windows/Linux

Signaler
Messages postés
13
Date d'inscription
mercredi 16 mai 2007
Statut
Membre
Dernière intervention
3 août 2007
-
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
-
Bonjour


Le but est de savoir combien de threads peuvent etre executer simultanément c'est à dire que j'ai un executable qui réalise une opération pendant un temps donné. Cet executable prend en paramètre le nombre de threads qu'il va executer simultanément. Ce que  j'aurais aimé savoir c'est le nombre limite de création de threads.


J'ai
réussi à "coder" quelque chose sous Windows et j'obtiens un nombre
de threads de 2000 environ c'est-à-dire que j'en crée un maximum
jusqu'aux limites de la machine et ce nombre limite est apparemment 2000 (La machine ne sature pas mais elle ne va pas plus loin que ce nombre.)


J'ai ensuite effectué la même opération
sous linux et je ne dépasse pas les 200. Contrairement à Windows où lorsque j'arrive autour des 2000 threads, la machine ne rame pas, sous linux c'est atroce... Je trouve cela très bizarre et
je me demande si cela ne viens pas de mon code sous linux. J'utilise ces fonctions:


Je déclare comme ceci



pthread_t handle[1024] ; //Je voudrais créer 1024 threads (par exemple)



Ensuite les créations des threads :



While (i != cpt) //cpt contient le nombre de threads que je souhaite créer
{
           i

f ( pthreat_create(&handle[i], NULL, " Nom du thread ", NULL)<0)

           {

                        printf("begin thread error");

                        return error

           }

           i++;

}












Il
y aurait-il quelque chose qui ne va pas dans ce code "simplifié" qui
ferait que je ne peux pas créer autant de threads que sous windows?


Il faut savoir que les ressources de la machine linux (Mandriva, récente version)  sont équivalentes voir supérieures à la machine Windows (Windows XP SP2) ce qui rend le problème encore plus bizarre, du moins à mes yeux.

J'espere avoir été clair
Merci de votre aide

4 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
2000 context threads obtenus ok mais pas pour autant que 2000 tourneront et loin s'en faut, seulement le nbr de coeurs de calculs libres à un certain moment.

ciao...
BruNews, MVP VC++
Messages postés
13
Date d'inscription
mercredi 16 mai 2007
Statut
Membre
Dernière intervention
3 août 2007

Je suis d'accord avec ca mais comment expliquer une si grande différence entre les deux OS sachant que les processeurs sont identiques et qu'il n'y a pas forcement plus de process qui tournent sur telle ou telle machine?
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
C'était juste pour préciser le cas Windows, je ne connais pas Linux.

ciao...
BruNews, MVP VC++
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
T'as quel noyau? La série 2.6 a beaucoup amélioré les performances des threads.

Tout process est limité par /usr/include/bits/local_lim.h qui dit:
/* The number of threads per process.  */
#define _POSIX_THREAD_THREADS_MAX       64
/* This is the value this implementation supports.  */
#define PTHREAD_THREADS_MAX     16384

Commande ulimit pour obtenir ou définir les limites d'un processus.

Si le but est uniquement de savoir le nombre max de threads fais aussi un
cat /proc/sys/kernel/threads-max
C'est le nombre maxi que le noyau peut supporter. En sachant que ton appli n'est pas seule sur le système.