Threads et threadingThreads and threading

Le multithreading vous permet d’accélérer la réactivité de votre application et, si votre application s’exécute sur un système multiprocesseur ou multicœur, d’accélérer son débit.Multithreading allows you to increase the responsiveness of your application and, if your application runs on a multiprocessor or multi-core system, increase its throughput.

Processus et threadsProcesses and threads

Un processus est un programme d’exécution.A process is an executing program. Un système d’exploitation utilise des processus pour séparer les applications qui sont en cours d’exécution.An operating system uses processes to separate the applications that are being executed. Un thread est l’unité de base à laquelle un système d’exploitation alloue du temps processeur.A thread is the basic unit to which an operating system allocates processor time. Chaque thread a une priorité de planification et maintient un ensemble de structures utilisé par le système pour enregistrer le contexte du thread quand l’exécution du thread est en pause.Each thread has a scheduling priority and maintains a set of structures the system uses to save the thread context when the thread's execution is paused. Le contexte du thread comprend toutes les informations dont le thread a besoin pour reprendre l’exécution sans interruption, notamment son ensemble de registres de CPU et de pile.The thread context includes all the information the thread needs to seamlessly resume execution, including the thread's set of CPU registers and stack. Plusieurs threads peuvent s’exécuter dans le contexte d’un processus.Multiple threads can run in the context of a process. Tous les threads d’un processus partagent son espace d’adressage virtuel.All threads of a process share its virtual address space. Un thread peut exécuter n’importe quelle partie du code du programme, y compris les parties exécutées par un autre thread.A thread can execute any part of the program code, including parts currently being executed by another thread.

Notes

Le .NET Framework fournit un moyen d’isoler les applications dans un processus à l’aide de domaines d’application.The .NET Framework provides a way to isolate applications within a process with the use of application domains. (Les domaines d’application ne sont pas disponibles sur .NET Core.) Pour plus d’informations, consultez la section Domaines d’application et threads de l’article Domaines d’application.(Application domains are not available on .NET Core.) For more information, see the Application domains and threads section of the Application domains article.

Par défaut, un programme .NET est démarré avec un thread unique, souvent appelé thread principal.By default, a .NET program is started with a single thread, often called the primary thread. Toutefois, il peut créer des threads supplémentaires pour exécuter du code en parallèle ou en même temps que le thread principal.However, it can create additional threads to execute code in parallel or concurrently with the primary thread. Ces threads sont souvent appelés threads de travail.These threads are often called worker threads.

Quand utiliser plusieurs threadsWhen to use multiple threads

Vous pouvez utiliser plusieurs threads pour accélérer la réactivité de votre application et tirer parti d’un système multiprocesseur ou multicœur pour accélérer son débit.You use multiple threads to increase the responsiveness of your application and to take advantage of a multiprocessor or multi-core system to increase the application's throughput.

Imaginez une application de bureau dans laquelle le thread principal est responsable des éléments d’interface utilisateur et répond aux actions des utilisateurs.Consider a desktop application, in which the primary thread is responsible for user interface elements and responds to user actions. Utilisez des threads de travail pour effectuer des opérations longues qui, sinon, occuperaient le thread principal et rendraient l’interface utilisateur non réactive.Use worker threads to perform time-consuming operations that, otherwise, would occupy the primary thread and make the user interface non-responsive. Vous pouvez aussi utiliser un thread dédié pour que la communication réseau ou des appareils soit plus réactive aux messages ou événements entrants.You also can use a dedicated thread for network or device communication to be more responsive to incoming messages or events.

Si votre programme procède à des opérations pouvant être effectuées en parallèle, la durée totale d’exécution peut être raccourcie en effectuant ces opérations dans des threads distincts et en exécutant le programme sur un système multiprocesseur ou multicœur.If your program performs operations that can be done in parallel, the total execution time can be decreased by performing those operations in separate threads and running the program on a multiprocessor or multi-core system. Sur un tel système, l’utilisation du multithreading peut accélérer le débit et la réactivité.On such a system, use of multithreading might increase throughput along with the increased responsiveness.

Comment utiliser le multithreading dans .NETHow to use multithreading in .NET

À compter de .NET Framework 4, la méthode recommandée pour utiliser le multithreading consiste à utiliser la bibliothèque parallèle de tâches (TPL) et Parallel LINQ (PLINQ).Starting with the .NET Framework 4, the recommended way to utilize multithreading is to use Task Parallel Library (TPL) and Parallel LINQ (PLINQ). Pour plus d’informations, consultez Programmation parallèle.For more information, see Parallel programming.

La bibliothèque TPL et PLINQ reposent sur les threads ThreadPool.Both TPL and PLINQ rely on the ThreadPool threads. La classe System.Threading.ThreadPool fournit une application .NET avec un pool de threads de travail.The System.Threading.ThreadPool class provides a .NET application with a pool of worker threads. Vous pouvez aussi utiliser des threads de pool de threads.You also can use thread pool threads. Pour plus d’informations, consultez Pool de threads managé.For more information, see The managed thread pool.

Enfin, vous pouvez utiliser la classe System.Threading.Thread qui représente un thread managé.At last, you can use the System.Threading.Thread class that represents a managed thread. Pour plus d’informations, consultez Utilisation de threads et de threading.For more information, see Using threads and threading.

Plusieurs threads peuvent avoir besoin d’accéder à une ressource partagée.Multiple threads might need to access a shared resource. Pour garder la ressource dans un état non endommagé et éviter des conditions de concurrence, vous devez synchroniser l’accès des threads à cette ressource.To keep the resource in a uncorrupted state and avoid race conditions, you must synchronize the thread access to it. Vous voudrez peut-être aussi coordonner l’interaction de plusieurs threads.You also might want to coordinate the interaction of multiple threads. .NET fournit un éventail de types que vous pouvez utiliser pour synchroniser l’accès à une ressource partagée ou coordonner l’interaction des threads..NET provides a range of types that you can use to synchronize access to a shared resource or coordinate thread interaction. Pour plus d’informations, consultez Vue d’ensemble des primitives de synchronisation.For more information, see Overview of synchronization primitives.

Ne gérez pas les exceptions dans les threads.Do handle exceptions in threads. Les exceptions non gérées dans les threads entraînent généralement la fin du processus.Unhandled exceptions in threads generally terminate the process. Pour plus d’informations, consultez Exceptions dans les threads managés.For more information, see Exceptions in managed threads.

Voir aussiSee also