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 :

[Multithreading] Thread ou non?


Sujet :

Threads & Processus C++

  1. #1
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut [Multithreading] Thread ou non?
    Bonjour,

    dans le cadre du développement d'une petite application visant à comparer 2 dossiers ensemble, je me vois dans l'interrogation suivante:

    Est ce que je peux créer un Thread ou plusieurs, qui, pour parfaire ma comparaison, effectueraient plusieurs choses, par ex:

    - Un thread qui tourne et qui liste tous les répertoires d'un dossier A
    - Un thread qui tourne et qui liste les répertoires d'un dossier B
    - Un thread qui en permanence, à chaque lecture de répertoire, compare les chemins d'accès.

    Je ne sais pas vraiment comment je pourrai développer mon appli pour qu'elle compare mes répertoires, aussi je me pose la question des threads, qu'en dites vous?

    merci d'avance

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Beaucoup de thread pour rien?
    Si tu penses que les actions vont prendre beaucoup de temps, tu peux commencer par découper en seulement deux threads: un pour l'IHM et un second pour la réalisation de la comparaison. Ensuite travaille plus sur l'algo utilisé pour comparer, c'est à ce niveau que tes gains seront les plus importants.

  3. #3
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Une règle générale en développement: n'utiliser des threads que quand on ne peut pas faire autrement. C'est comme les pointeurs en c++.
    D'après la description de ton programme, je ne pense pas que tu aies besoin de threads. A moins que ce ne soit à but didactique?

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    n'utiliser des threads que quand on ne peut pas faire autrement.
    Ce n'est vrai que pour un système mono-cœur.
    Dans le cas général, utiliser des threads permet de mieux exploiter la puissance de la machine, mais ça nécessite de faire gaffe à la synchronisation qui aura d'ailleurs un coût.

  5. #5
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Exact, je suis allé un peu vite. Je devrais ajouter: "quand on a peu de connaissances sur les threads".

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Il faut dire que r0d a raison, les erreurs à cause de thread ne sont pas reproductibles et difficilement débogable... Bonjour le temps perdu pour rien...
    Celà dit, sur du multi-coeur, ça peut considérablement accélérer les calculs.

    Enfin, ici pour faire des recherches à deux endroits différents, si c'est sur le même disque, 2 threads ça va pas aider... Pas du tout!

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    (Acharnons-nous ):J'ai trouvé la réponse de Rod un peu rapide. Moi, comme dit dans mon premier mail, j'aime bien les solutions à 2 thread: un pour l'IHM et un pour le boulot. De même, dans des applis réseaux, avoir un thread dédié aux coms, pour les applis serveurs, un thread pour le listen, et un thread pour tous les clients). Mais, en général, j'essaye de ne pas aller au delà de 2 ou 3 threads. Après, à mon avis, la complexité devient un facteur dissuasif (pb de synchro, sécurisation échanges, etc...).

  8. #8
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Bon ok, je vais être plus précis. Le PO n'a pas parlé d'IHM, et je ne vois pas en quoi son problème nécessite plusieurs threads. De plus, dans 99% des cas, et en particulier sur ce type de programme, les quelques cycles que l'on va gagner en utilisant plusieurs coeurs ou plusieurs processeurs ne valent pas l'effort à mettre en oeuvre pour faire ça bien, quand on connais mal le sujet, ce qui me semble être le cas du PO sinon il n'aurait pas posé cette question ici.

    Ensuite effectivement, dans certains cas extrêmement marginaux (ou dans une approche didactique), il peut être utile d'utiliser plusieurs threads, mais je crois que ce n'est pas le cas ici (je me trompe peut-être).

    Et, de façon générale, ça fait des années que je répond à des questions sur divers forum de dev, et l'expérience a montré que si la question ne spécifie pas des contraintes particulières, le meilleur conseil que l'on puisse donner sera de faire au plus simple.

    My cent.

  9. #9
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 638
    Par défaut
    Salut,

    Personnellement, je suis tout à fait d'accord avec le point de vue de r0d...

    Trop souvent, les dev partent "en vrille" parce que le développeur a voulu aller chercher la complexité là où il n'y avait a priori pas besoin d'aller la chercher.

    De même, il n'est pas rare de voir sur les fora que les gens qui veulent répondre partent sur des considérations (application avec IHM... mais est-ce obligatoire service réseau, mais là aussi, est-ce nécessaire multi ou mono processeur/core ) qui, si elles peuvent s'avérer utiles n'en vont pas moins s'écarter de l'objectif premier de la personne qui pose la question.

    De manière générale, la solution la meilleure est toujours la plus simple, et, quand on s'attaque au problème des threads, il faut quand même avouer que, ainsi que l'a signalé r0d, cela va immanquablement amener de la complexité dans la gestion.

    Maintenant, nous sommes bien d'accord sur l'énorme avantage que peut représenter la gestion multi-threadée d'une application, d'autant plus que les coeurs/processeurs ont actuellement tendance à se multiplier comme moustiques en été...

    Mais, de là à préconiser d'office l'utilisation de threads alors qu'il y a surement des optimisation d'algorithmes plus indispensables à proposer, cela me ressemble à vouloir chasser un moustique avec un canon

    Je crois donc en définitive que le mieux à faire est de conseiller d'abord de faire l'essai en mono thread, et d'envisager de passer en version multi-thread uniquement s'il s'avère que le traitement est *réellement* et *significativement* trop long.
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  10. #10
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Disons qu'il y a 2 écoles. Parlons seulement de la 1ère école.

    Le multi-thread, c'est très facile quand il n'y aucun risque de conflit, tout thread est indépendant et a une action confinée.
    C'est parfois le cas dans le calcul scientifique. Là, je dirais qu'il y a très peu de risque de se tromper, et les erreurs sont reproductibles.

    Quand c'est du multi-thread "de gestion", c'est pas pareil, là les emmerdes arrivent quand on connait pas bien.

  11. #11
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Ca part en vrille non? Il me semble que ma première réponse était à peu près dans l'esprit de ce qui a été dit précédemment:
    Citation Envoyé par 3DArchi Voir le message
    Beaucoup de thread pour rien?
    Si tu penses que les actions vont prendre beaucoup de temps, tu peux commencer par découper en seulement deux threads: un pour l'IHM et un second pour la réalisation de la comparaison. Ensuite travaille plus sur l'algo utilisé pour comparer, c'est à ce niveau que tes gains seront les plus importants.
    La partie importante pour moi était bien:
    Ensuite travaille plus sur l'algo utilisé pour comparer, c'est à ce niveau que tes gains seront les plus importants.
    Après, Rod, ta réponse était intrigante: je vois souvent des réponses mettant en garde contre le multi threading, sans que je comprenne bien pourquoi (l'absence de maîtrise n'étant pas une bonne excuse à mon sens). Si vous voulez continuer ce débat, je propose qu'on ouvre un autre poste plus spécifique sur le multi threading: avantage/inconvénient.

  12. #12
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Je ne sais pas trop, mais je n'ai pas l'impression que nous soyons sorti du sujet, puisqu'en discutant sur les thread, nous essayons de répondre à la question posée, finalement. Je suis d'avis d'attendre une nouvelle intervention de Freud44 avant de continuer

    edit: en ce qui me concerne, j'étais intervenu surtout parce que je ne comprenais pas pourquoi tu parlais d'IHM

  13. #13
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par r0d Voir le message
    Je ne sais pas trop, mais je n'ai pas l'impression que nous soyons sorti du sujet, puisqu'en discutant sur les thread, nous essayons de répondre à la question posée, finalement. Je suis d'avis d'attendre une nouvelle intervention de Freud44 avant de continuer
    OK

    Citation Envoyé par r0d Voir le message
    edit: en ce qui me concerne, j'étais intervenu surtout parce que je ne comprenais pas pourquoi tu parlais d'IHM
    C'était générique. IHM=ce que tu veux pour dire à l'utilisateur que l'appli est encore vivante: une led qui clignote, un boite de dialogue, des '.' sur une console, etc...

  14. #14
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Je suis d'accord avec R0d.
    Il suffit d'utiliser la programmation de threads quand on ne peut pas faire autrement préférablement et contrairement à ce que l'on pourrait penser cela n'accroit pas forcément les performances de traitement car l'OS doit commuter d'une tache à une autre fréquemment.
    Maintenant il faut faire des essais dans son application voir s'il y a un gain réel en performances.

  15. #15
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Freud44 Voir le message
    - Un thread qui tourne et qui liste tous les répertoires d'un dossier A
    - Un thread qui tourne et qui liste les répertoires d'un dossier B
    - Un thread qui en permanence, à chaque lecture de répertoire, compare les chemins d'accès.
    Son problème est de parcourir deux répertoires pour les comparer.
    Quel gain peut il gagner avec des threads?
    Pour moi, le point bloquant sur les performances dans son problème sont les accès disque pour récupérer les info des répertoire.
    Je ne pense pas qu'avoir deux thread pour lister ces repertoires va générer un gain.

    Par contre utiliser des thread pour faire la comparaison pourrais être intéressant, si la liste est grande.

  16. #16
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Son problème est de parcourir deux répertoires pour les comparer.
    Quel gain peut il gagner avec des threads?
    A priori, pas grand-chose.

    Si les deux répertoires sont sur le même disque, il va probablement y perdre beaucoup, s'ils sont sur des disques différents, peut-être va-t-il gagner un peu.

    Si le traitement de comparaison est lourd (par exemple, une fois un fichier commun trouvé, il calcule les différences sur ce fichier), il peut aussi y avoir un gain.

    C'est à peu près tout ce que je vois.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. [MultiThreading] DecimalFormat.parse non thread-safe
    Par Jidefix dans le forum Concurrence et multi-thread
    Réponses: 9
    Dernier message: 06/05/2009, 16h17
  2. [Multithreading] Thread ou non?
    Par Freud44 dans le forum C++
    Réponses: 15
    Dernier message: 22/10/2008, 20h29
  3. [MFC] Multithreading, Thread Worker
    Par pier* dans le forum MFC
    Réponses: 4
    Dernier message: 20/04/2007, 21h49
  4. Réponses: 3
    Dernier message: 07/03/2006, 20h36
  5. [thread] Exception non catchée
    Par mammistegon dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 22/11/2004, 21h43

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