3. Pourquoi utiliser plusieurs threads
3.1 Avantages
Une application multithread peut gagner en :
- réactivité — une activité lente n’immobilise pas nécessairement l’interface ou le serveur;
- partage — les travailleurs accèdent directement aux structures communes;
- économie — les ressources du processus ne sont pas recréées pour chaque activité;
- extensibilité — des threads indépendants peuvent être placés sur plusieurs cœurs.
Un serveur illustre bien ce modèle : un thread principal accepte les requêtes et remet chacune à un travailleur. L’acceptation des nouvelles connexions peut continuer pendant le traitement des précédentes.
Les diapositives citent un ancien exemple Solaris où la création d’un processus était environ trente fois plus lente que celle d’un thread. Il s’agit d’un ordre de grandeur propre à cet environnement, non d’une constante portable.
3.2 Concurrence et parallélisme
La concurrence signifie que plusieurs activités progressent pendant une même période. Sur un seul cœur, elles peuvent être entrelacées sans s’exécuter exactement au même instant. Le parallélisme signifie que plusieurs activités s’exécutent simultanément sur plusieurs unités de calcul.
Deux formes sont distinguées :
- parallélisme de données : appliquer un traitement comparable à différentes portions d’un ensemble;
- parallélisme de tâches : exécuter simultanément des opérations différentes.
Un nombre élevé de threads ne garantit aucun gain. Il faut découper les tâches, équilibrer leur durée, répartir les données, résoudre les dépendances et recomposer les résultats. La journalisation aide à diagnostiquer une exécution variable, mais elle ne remplace pas une synchronisation correcte.