1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    juin 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : juin 2017
    Messages : 1
    Points : 1
    Points
    1

    Par défaut Qu'est ce qu'un thread et un/une coroutine ?

    Bonjour à tous, je code depuis quelques mois à présent en C++ et Python majoritairement et j’entends souvent parler de "threads" ainsi que de "coroutines" dans d'autre langages de programmations ou sur ceux que j’utilise. J'ai une vision très vague de leurs utilités : Je sais selon moi par exemple qu'un thread permet de séparer les instructions d'un code source en deux parties avec d'avoir un maximum de performances et concernant les coroutines, ils/elles reprennent le même principe. Seulement voilà, je suis un peu perdu, je ne sais pas quelle est la différence entre ces deux concepts et leurs définitions "exactes".

    P.S : J'aimerais apprendre le langage Go afin de voir un autre horizon de la programmation, est-ce une bonne idée selon vous ?

    Je vous remercie d'avance !

  2. #2
    Membre averti Avatar de Kennel sébastien
    Homme Profil pro
    Développeur
    Inscrit en
    septembre 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : septembre 2008
    Messages : 226
    Points : 327
    Points
    327

    Par défaut

    Bonjour Reachiper,

    Je suis pas sûr qu'il y ai vraiment une différence.

    À l'origine un « Thread » ou fil d'exécution en français permet d'exécuter deux programmes en parallèle.

    Voix-tu, à la base ton programme est synchrone il exécute une tâche après l'autre jusqu'à qu'il a fini.

    Mais si tu crées un fil d'exécution, il exécute les tâches de ce nouveau fil mais sans attendre qu'il termine ces tâches et traite donc les tâches du fil d'exécution de base en même temps.

    Tu rencontres ce cas par exemple dans une interface graphique de bureau, des jeux vidéos qui attend des réponses d'événements à partir d'une boucle infinie.

    Tu peux aussi rencontrer cela dans un programme de messagerie par exemple.

    Les goroutines font de même il exécute des tâches de manière asynchrone au lieu d'être synchrone, mais répartie ces tâches sur plusieurs cœurs, voir processeurs.

    Donc si tu utilises les différents cœurs de ton processeur ton programme est forcément beaucoup plus rapide.

    PS : c'est « goroutine » et non « coroutine ».

    Pour ce qui d'apprendre « Go », ben disons pas rapport aux langages que tu as étudié c'est de nouveau bien différent.

    Je pense que tu as du voir la différence énorme entre « C++ » et « Python », « Go » est de nouveau différent, mais est aussi un langage facile à apprendre d'un autre coter à rapport C++ mais plus dur que Python.
    Vous cherchez à apprendre les bases en langage « C », « Go », « Rust », « PHP 7 », « Java 9 » ou « Python 3 » ? N'hésitez pas à me contacter par MP.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2016
    Messages : 114
    Points : 238
    Points
    238

    Par défaut

    Les threads, n'étant pas moi même dev sys expérimenté, c'est un fil d’exécution parallèle qui tire partit des capacités de la machine pour exécuter plusieurs processus simultanément dans le même programme.

    C'est un objet un peu barbare qu'il faut manipuler avec attention, pour ce que j'en sais.

    Un coroutine, ou goroutine, c'est un fil d'exécution à ordonnancer et exécuter en parallèle sur un des threads mis à disposition par le runtime.
    C'est plus léger car il n'y a pratiquement plus de gestion à faire, si ce n'est, le démarrer et en sortir.
    Tout le reste est pris en charge par le langage au runtime (combien de threads, ordonnancement des tâches, exécution des tâches, détection des lock).

    Est ce que c'est plus performant ? Sur le papier oui. Dans les faits il y a un coût à cette parallélisation,
    - soit les deux tâches travaillent sur la même zone mémoire auquel cas il faudra employer des techniques de synchronisation pour que l'intégrité mémoire soit respectée. (il faudra faire attention par ailleurs, certains sont tentés de dupliquer les données pour travailler dans chaque thread, l'occupation mémoire peut vite exploser)
    - soit les deux tâches travail sur des zones mémoires différentes auquel cas effectivement un gain net peut advenir.

    D'une manière générale il serait plus lent d'utiliser deux goroutines pour faire l'addition de (1+1)+(5-6),
    car le coût des goroutines reste plus élevé que l'opération à exécuter.

    Une dernière chose, avant d'optimiser son code, apprendre à le profiler, des opérations telles
    qu'une allocation
    une synchronisation
    ou une mauvaise utilisation du cache cpu
    pourrisse les performances et il faudrait d'abord s'attacher à cela avant de se jeter dans le //isme.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/05/2016, 19h38
  2. Réponses: 8
    Dernier message: 04/08/2010, 12h29
  3. Où est comment placer mon Thread?
    Par Micke7 dans le forum Général Java
    Réponses: 3
    Dernier message: 13/04/2010, 13h25
  4. Qu'est ce qu'un thread ?
    Par Bennaceur_amel dans le forum Linux
    Réponses: 2
    Dernier message: 27/03/2005, 01h26

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