IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Threads & Processus C++ Discussion :

Comparaison processus et thread


Sujet :

Threads & Processus C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut Comparaison processus et thread
    Bonjour à tous,

    La question que je vous soumets est valable pour les systèmes *Unix, Linux, MacOS et Windows. Elle est très générale

    Y-a-t-il une différence de performance entre un processus et un thread ? Quelles sont les contraintes pour les meilleures performances ?

    Je dois faire une application parallélisée où la performance est critique. De plus les threads/processus doivent communiquer en permanence de grandes quantités de données.

    Question subsidiaire, peut-on connaître la consommation CPU d'un thread ?

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    A mon avis, un thread est plus performant qu'un processus.

    D'abord, c'est une structure plus light pour le noyau, le temps de création et d'instanciation doit être rapide. Ceci n'a peut être pas trop d'importance si les thread ou les process sont créés au début.

    Ensuite, le temps de swap d'un thread à l'autre doit être plus rapide que entre 2 process car justement comme l'espace mémoire est partagé, il n'y a pas besoin de le changer.

    Tu peux echanger des donnés entre thread avec des mécanismes plus simple inter thread comme les section critiques qui n'existent pas en inter process.

    Le problème d'un thread, c'est que si l'un d'eux par en cacahuètes et corromp la mémoire, il risque d'impacter les autres.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    Citation Envoyé par DSGSLA Voir le message
    Y-a-t-il une différence de performance entre un processus et un thread ?
    La question n'a pas vraiment lieu d'être car le processus est simplement l'unité qui représente l'ensemble des threads du programme (plus d'autres informations).

    Donc la comparaison des performances entre processus/threads est contradictoire, puisque les threads du programme sont une composante du processus. Les performances du processus sont le reflet des performances des threads sous-jacents.

  4. #4
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Je pense que la question (par rapport aux performances) était du genre :
    « Si on a X tâches à effectuer en parallèle, quelle différence de performances y aura-t-il entre utiliser X threads et utiliser X processus ? »

  5. #5
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Certainement.

    Et ram-0000 a très bien répondu à cette question.

    J'ai pris la question de DSGSLA sur les performances processus/threads Brut de Brut.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut
    Citation Envoyé par Steph_ng8 Voir le message
    Je pense que la question (par rapport aux performances) était du genre :
    « Si on a X tâches à effectuer en parallèle, quelle différence de performances y aura-t-il entre utiliser X threads et utiliser X processus ? »
    Effectivement c'est à ça que je pensais.
    Merci pour vos réponse.

    Cependant peut-on évaluer la consommation CPU d'un thread, ou son ratio par rapport au processus père ? J'ai besoin d'évaluer les goulets d'étranglement dans le flux.

  7. #7
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Sous windows seven tu as le moniteur de ressouces, mais au mieux tu peux voir la gestion sur chaque processeur.

    Je pense, mais sans en être certain, qu'il y a une API dans le dernier windows SDK pour gérer cela. Sinon il existe des outils : http://msdn.microsoft.com/en-us/libr...=VS.60%29.aspx

    Pour les autres OS, je ne sais pas.

    Sinon le cas classique, c'est de mesurer les performances à l'intérieur des threads dans le code.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut
    Sinon le cas classique, c'est de mesurer les performances à l'intérieur des threads dans le code.
    Je ne vois pas comment on fait cela.

    Une autre question m'est venue à l'esprit sur le sujet : sur un machine multiprocesseur/multicœur les différents threads d'un même processus s'exécutent-ils sur le même cœur que le processus père ou l'OS les répartit sur les cœurs selon les ressources disponibles ? Cela altère-t-il les communications inter-thread ?

  9. #9
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    Votre question à l'origine est très délicate, parce qu'elle est très large.

    Avez-vous identifié tous les problèmes de performance en question (accès disque, accès mémoire, calcul intensif, réseau, etc...).

    Difficile de répondre clairement à une question large.

    Une fois les problèmes identifiés, quelles solutions. Pour du calcul intensif par exemple vous avez Cuda, DirectCompute, librairie de tâche parallèles, codes optimisés, langage, compilateur, etc...

    Ensuite selon l'OS, comportement différent. Par exemple windows seven c'est 10 ms avant le basculement de contexte, pour windows server 2008 c'est 15 ms.

    Ensuite votre optimisation devra-t-elle s'appuyer uniquement sur le hardware, ou une résolution logicielle sera-t-elle nécessaire voir à additionner.

    Bref un sujet tellement vaste, qu'il est impossible de dire "il faut faire comme ça et c'est bon".

    De plus les technologies concernant le développement parallèle (multi-coeur, Cuda, etc...) sont en phase de pleine évolution.

    Bref je ne vous donne que quelques éléments de réflexion, c'est certainement incomplet et ça ne peut pas répondre à une question au sens large.

    Citation Envoyé par DSGSLA Voir le message
    Je ne vois pas comment on fait cela.
    On prend un chronomètre et on mesure le temps d'exécutions des threads, surtout là où on pense que ça va être gourmand.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut
    Je compte réaliser une application multiplateforme, donc je dois prendre en considération les OS majeurs. Ce qui étend la portée du problème évidemment.
    Les machines cibles sont multiprocesseurs et multicoeurs. Je ne prends pas en compte pour le moment les GPU. Le langage est le C++. Il n'y a pas d'utilisation de bibliothèques particulières tel que OpenMP, OpenCL et consort. La parallélisation se fait uniquement par l'architecture de l'application.


    Je reprends la question
    Une autre question m'est venue à l'esprit sur le sujet : sur un machine multiprocesseur/multicœur les différents threads d'un même processus s'exécutent-ils sur le même cœur que le processus père ou l'OS les répartit sur les cœurs selon les ressources disponibles ? Cela altère-t-il les communications inter-thread ?

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je ne connais pas *n*x là-dessus, mais sous Windows, c'est réglable, avec des fonctions comme SetProcessAffinityMask(), SetThreadAffinityMask() et SetThreadIdealProcessor().

    Mais normalement, Windows répartit dynamiquement et un thread n'est pas verrouillé sur un processeur.
    C'est pourquoi quand tu as un programme "normal" avec qui fait une boucle infinie sur un bi-coeur, tu n'as pas forcément un coeur à 100% et l'autre à 0%: Le thread peut être déplacé après chaque quantum, ce qui met les deux coeurs à environ 50%.

    PS: Sous *n*x, ça dépend entre autres de la version: Avant la NPTL, le kernel ne savait même pas ce qu'était un thread, et c'était la partie User du processus qui réglait ça elle-même. Depuis la NPTL, les threads font honneur à leur nom français de "processus légers", et vus du kernel, plusieurs threads d'un même processus sont en fait plusieurs processus partageant leurs ressources.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut
    Merci à tous pour vos réponses.
    J'ai assez de matière pour commencer un proto.
    Je clos donc le fil.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lister les processus léger (Thread)
    Par joffrey575 dans le forum Windows
    Réponses: 4
    Dernier message: 12/06/2015, 16h32
  2. Probleme avec des SHM entre processus et thread.
    Par Baradhur dans le forum Threads & Processus
    Réponses: 8
    Dernier message: 18/12/2010, 16h09
  3. Processus ou thread
    Par slig_80 dans le forum C
    Réponses: 6
    Dernier message: 16/12/2010, 16h37
  4. Echange processus A <-> threads B
    Par oodini dans le forum Windows
    Réponses: 15
    Dernier message: 25/04/2008, 11h44
  5. [SIGNAL] threads et processus
    Par beLz dans le forum POSIX
    Réponses: 14
    Dernier message: 21/12/2004, 01h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo