Quand utiliser le multitâche
Il existe deux façons d’implémenter le multitâche : en tant que processus unique avec plusieurs threads ou en tant que processus multiples, chacun avec un ou plusieurs threads. Une application peut placer chaque thread qui nécessite un espace d’adressage privé et des ressources privées dans son propre processus, afin de le protéger contre les activités d’autres threads de processus.
Un processus multithread peut gérer des tâches mutuellement exclusives avec des threads, telles que la fourniture d’une interface utilisateur et l’exécution de calculs en arrière-plan. La création d’un processus multithread peut également être un moyen pratique de structurer un programme qui effectue simultanément plusieurs tâches similaires ou identiques. Par exemple, un serveur de canal nommé peut créer un thread pour chaque processus client qui s’attache au canal. Ce thread gère la communication entre le serveur et le client. Votre processus peut utiliser plusieurs threads pour accomplir les tâches suivantes :
- Gérer les entrées pour plusieurs fenêtres.
- Gérer les entrées de plusieurs appareils de communication.
- différencier des tâches de priorités différentes (par exemple, un thread prioritaire gère les tâches soumises à des contraintes de temps, et un thread de priorité inférieure effectue d’autres tâches) ;
- autoriser l’interface utilisateur à rester réactive, tout en allouant du temps aux tâches en arrière-plan.
Il est généralement plus efficace pour une application d’implémenter le multitâche en créant un processus multithread unique, plutôt que de créer plusieurs processus, pour les raisons suivantes :
- Le système peut effectuer un changement de contexte plus rapidement pour les threads que pour les processus, car un processus a plus de surcharge qu’un thread (le contexte de processus est plus grand que le contexte de thread).
- Tous les threads d’un processus partagent le même espace d’adressage et peuvent accéder aux variables globales du processus, ce qui peut simplifier la communication entre les threads.
- Tous les threads d’un processus peuvent partager des handles ouverts avec des ressources, telles que des fichiers et des canaux.
Il existe d’autres techniques que vous pouvez utiliser à la place du multithreading. Les plus importants d’entre eux sont les suivants : entrée et sortie asynchrones (E/S), ports d’achèvement d’E/S, appels de procédure asynchrone (APC) et possibilité d’attendre plusieurs événements.
Un thread unique peut lancer plusieurs demandes d’E/S chronophages qui peuvent s’exécuter simultanément à l’aide d’E/S asynchrones. Les E/S asynchrones peuvent être effectuées sur des fichiers, des canaux et des périphériques de communication en série. Pour plus d’informations, consultez Synchronisation et entrée et sortie qui se chevauchent.
Un thread unique peut bloquer sa propre exécution en attendant qu’un ou l’ensemble des événements se produisent. Cela est plus efficace que d’utiliser plusieurs threads, chacun attendant un seul événement, et plus efficace que l’utilisation d’un thread unique qui consomme du temps processeur en vérifiant continuellement si des événements se produisent. Pour plus d’informations, consultez Fonctions d’attente.