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++

Vue hybride

Freud44 [Multithreading] Thread ou... 21/10/2008, 09h09
3DArchi Beaucoup de thread pour rien?... 21/10/2008, 09h28
r0d Une règle générale en... 21/10/2008, 10h15
loufoque Ce n'est vrai que pour un... 21/10/2008, 12h47
r0d Exact, je suis allé un peu... 21/10/2008, 12h59
3DArchi Ca part en vrille non? Il me... 21/10/2008, 17h22
r0d Je ne sais pas trop, mais je... 21/10/2008, 17h38
3DArchi OK C'était générique.... 21/10/2008, 18h20
Mat.M Je suis d'accord avec R0d.... 21/10/2008, 18h33
yan Son problème est de parcourir... 22/10/2008, 11h10
JolyLoic A priori, pas grand-chose. ... 22/10/2008, 20h29
Message précédent Message précédent   Message suivant Message suivant
  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 290
    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 290
    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 290
    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 290
    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
    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.

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    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 290
    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

  9. #9
    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...

  10. #10
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    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 527
    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.

  11. #11
    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.

  12. #12
    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