Tutorial d'initiation A la programmation avec l'API Windows
Tutorial d'initiation a la programmation Windows avec Microsoft Visual C++
Chapitre 5Le multithreading1. Introduction
Cours théorique :
Commençons tout d'abord par une explication sur le terme de multithreading. Le multithreading est le fait d'exécuter des tâches simultanément (multitâche). Les termes multitâche et multithread ne sont pas totalement similaires. Le terme multithread indique une application qui effectue différentes taches simultanément. Le terme de multitâche est un terme plus général et plus commun pour parler d'un système capable de gérer plusieurs applications simultanément.
Dans un programme classique, les instructions sont traitées de manière linéaire, "ligne à ligne". En ignorant le reste du système on pourrait dire que le processeur exécute les instructions de la ligne courante, puis passe à la suivante. En réalité ce n'est pas tout à fait vrai car les autres applications doivent elles aussi avoir accès au processeur, ainsi que le système d'exploitation lui même.
Un thread est en fait une unité d'exécution. Chaque thread peut avoir accès au processeur et exécuter des instructions. Un thread peut se comporter exactement comme si il ne partageait pas le processeur (mais dans ce cas, il faudrait disposer d'autant de processeurs qu'il y a de threads). Pour éviter cet inconvénient, le système donne l'accès au processeur à chaque thread durant un temps très court (quelques millisecondes), et ceci de manière circulaire. Si le nombre de thread augmente, chaque thread devra attendre un délai plus long avant d'obtenir de nouveau l'accès au processeur.
De cette manière, chaque application peut fonctionner comme si elle était seule à utiliser le processeur. La seule différence est que l'exécution est plus lente. Si le processeur est suffisamment rapide, l'exécution d'un nombre modéré de threads peut s'effectuer très rapidement. C'est le cas actuellement. Dans un système utilisant Windows, le nombre de threads avoisine 50 au repos. Il dépasse rapidement 100.
L'utilisation du multithread consiste à créer un programme qui comporte plusieurs threads. Ce programme peut donc exécuter plusieurs instructions "simultanément". On peut alors se demander l'utilité d'une telle pratique. En effet, puisque le processeur est partagé, l'exécution du programme ne sera pas plus rapide. Elle sera seulement fragmentée. Un exemple simple permet de comprendre l'utilité du multithreading.
Considérons une application réalisant un transfert de fichier. Cette application dispose d'une interface graphique présentant une barre de progression ainsi qu'un bouton 'annuler'. En effet l'utilisateur désire être tenu au courant de l'avancement de la copie. De plus il veut pouvoir stopper celle ci à tout moment si il le désire. Le programme doit donc réaliser une boucle de manière à recevoir les messages. Mais il doit également s'occuper de la copie des fichiers, ce qui reste son rôle principal. Si le programme écrit sur le disque, il ne peut plus recevoir les messages. La fenêtre ne sera donc plus rafraîchie. De plus, si l'utilisateur clique 'annuler', l'application ne traitera pas cette demande puisqu'elle ne recevra même pas le message... Une telle application utilisera donc 2 threads. Le premier thread s'occupera de la réception et du traitement des messages. Le deuxième thread s'occupera de la copie des fichiers. De cette manière, la réception des messages sera effectuée même au cours de la copie. Si l'utilisateur demande l'arrêt de la copie, le premier thread devra simplement stopper l'exécution du second. La copie sera alors stoppée.
|