multithread
Une définition du Jargon Français.
nom→ masculin→, adjectif→. [système]. Capacité d'un logiciel à disposer de plusieurs fonctions simultanément actives au sein d'un seul processus.
Le multi-threading est le fait d'utiliser cette capacité.
L'apartment multi-threading est le modèle de multithreading utilisé par COM (sens 2).
Voir aussi thread, processus léger, SMT (sens 2), HPC (sens 2).
| |
[modifier] Exposé
Un système non multithread ne peut simultanément animer deux fonctions puisque son processeur n'en exécute à tout moment précis qu'une seule, donc répartit ses efforts entre elles en leur accordant tour à tour de courts laps de temps. On dit qu'il découpe des « tranches » (slices) temporelles (accordant une tranche à une fonction, durant laquelle il exécute les instructions qui la composent, puis à l'autre, puis retournant à la première ...). C'est un peu comme lorsque bébé pleure : on le câline durant quelques dizaines de secondes afin de tenter de le calmer, puis on court s'occuper du biberon, que l'on laisse en plan parce que bébé hurle, et ainsi de suite.
Dans certains contextes (données traitées + machine et logiciel employés) la vitesse de traitement dépend de la puissance de calcul, donc des processeurs (on qualifie les performances de « CPU bound », liées au CPU) donc on souhaiterait pouvoir en ajouter afin d'accélérer.
Ajouter une machine complète laisse à désirer car, entre autres, elle contraint à acquérir du matériel inutile (ne serait-ce que deux boîtiers !) et, pis, la communication entre deux machines distinctes ralentit l'ensemble, même via plusieurs interfaces réseau rapides disposées en faisceau. C'est utile afin d'améliorer la disponibilité mais peu efficace lorsqu'il s'agit d'augmenter les performances.
Ajouter au moins un processeur à la carte mère de façon à animer une instance du programme sur chaque processeur ne résout qu'imparfaitement le problème car il convient généralement d'organiser leurs efforts et de les laisser partager des résultats intermédiaires, donc de leur ménager un canal de communication. Or, du point de vue du système, chaque instance serait un processus, qui ne partagent jamais pas le même espace d'adressage, ce qui signifie que les variables de l'un ne sont pas directement accessibles pour l'autre. Cela contraindrait à modifier les codes sources existants ainsi que les habitudes des développeurs, afin qu'ils profitent des fonctions de communication interprocessus (en particulier de gestion de mémoire partagée).
Un ensemble multithread offre une solution car, du point de vue du développeur, un seul exemplaire du programme fonctionne et il peut en son sein créer des fonctions qui partageront si nécessaire certaines variables, s'inter-appeleront directement et seront toutes actives tant que la machine disposera d'un processeur mobilisable.
Le débogage de ce genre de code ressemble toutefois au problème du célibataire sans enfant auquel on a demandé de garder une douzaine de pré-ados très agités. Ténacité, santé, patience et concentration sont de rigueur.
| |

