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

LaKiks51 Messages postés 13 Date d'inscription mercredi 16 mai 2007 Statut Membre Dernière intervention 3 août 2007 - 26 juil. 2007 à 16:01
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 - 28 juil. 2007 à 11:30
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 juil. 2007 à 16:37
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++
0
LaKiks51 Messages postés 13 Date d'inscription mercredi 16 mai 2007 Statut Membre Dernière intervention 3 août 2007
26 juil. 2007 à 16:44
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?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 juil. 2007 à 16:49
C'était juste pour préciser le cas Windows, je ne connais pas Linux.

ciao...
BruNews, MVP VC++
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
28 juil. 2007 à 11:30
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.
0
Rejoignez-nous