Multithreading

Le multithreading (ou multitâche au niveau du thread) est une technique qui permet à un même programme d’exécuter plusieurs séquences d’instructions (threads) en parallèle ou de façon apparemment simultanée, afin de mieux utiliser les ressources du processeur et d’améliorer les performances.

Imaginez un chef cuisinier qui doit :

  • surveiller une sauce,
  • éplucher des légumes,
  • cuire du riz.

S’il faisait tout l’un après l’autre, le repas serait lent.
Mais s’il alterne rapidement entre les tâches (« pendant que la sauce mijote, je coupe les légumes »), tout avance plus vite.

En informatique, chaque « tâche » s’appelle un thread. Le multithreading permet à un programme de gérer plusieurs threads à la fois, même sur un seul cœur de processeur.

Ce qu’il faut savoir

  • Un thread est une unité d’exécution légère à l’intérieur d’un processus.
  • Tous les threads d’un même processus partagent la même mémoire (variables, fichiers ouverts), ce qui facilite la communication… mais crée des risques de conflits (ex. : deux threads qui modifient la même variable en même temps).
  • Le système d’exploitation (ou le langage, comme Java/Go) gère l’ordonnancement des threads.

Cas d’usage concrets

ContexteUtilité du multithreading
Serveur webGérer plusieurs requêtes simultanées sans bloquer les autres
Interface graphiqueGarder l’UI réactive pendant un calcul long (ex. : chargement de données)
Traitement de donnéesParalléliser des calculs (ex. : traitement d’images, ETL)
Applications mobilesTélécharger du contenu en arrière-plan pendant que l’utilisateur navigue

Risques et défis

  • Conditions de concurrence (race conditions) : deux threads accèdent/modifient une ressource en même temps → corruption.
  • Interblocage (deadlock) : deux threads attendent l’un l’autre → blocage total.
  • Complexité accrue : le code devient plus difficile à lire, tester et déboguer.

Solutions : verrous (mutex), files d’attente, programmation fonctionnelle, ou modèles comme actor model (ex. : en Erlang, Akka).

Multithreading vs Multiprocessing

MultithreadingMultiprocessing
UnitéThreads (légers)Processus (lourds)
MémoirePartagéeIsolée
SécuritéMoins robuste (risque de conflit)Plus robuste (isolation)
PerformanceFaible surcoût, bon pour les I/OMeilleur pour le CPU intensif
ExempleServeur Node.js (1 thread + boucle d’événements), JavaPython avec multiprocessing, traitement vidéo

Node.js, par exemple, n’utilise pas le multithreading traditionnel : il repose sur une boucle d’événements asynchrone (un seul thread, mais non bloquant).

Explorer les thématiques : Développement & technologies
Les contenus de définition restent publics. Les ressources (outils, grilles, supports) liées à cette fiche sont disponibles dans l’espace membre.