1. Le concept de multi-threading
Windows est un système multitâche Si vous utilisez Windows 2000 et supérieur, vous pouvez afficher les programmes et programmes actuellement en cours d'exécution sur le système. processus du gestionnaire de tâches. Qu'est-ce qu'un processus ? Lorsqu'un programme démarre, il s'agit d'un processus. Le processus fait référence au programme en cours d'exécution et aux ressources mémoire et système utilisées par le programme. Un processus est composé de plusieurs threads. Un thread est un flux d'exécution dans le programme. Chaque thread possède son propre registre privé (pointeur de pile, compteur de programme, etc.), mais la zone de code est partagée, c'est-à-dire que différents Threads peuvent s'exécuter. la même fonction. Le multithreading signifie qu'un programme contient plusieurs flux d'exécution, c'est-à-dire que plusieurs threads différents peuvent être exécutés simultanément dans un programme pour effectuer différentes tâches, ce qui signifie qu'un seul programme est autorisé à créer plusieurs threads d'exécution parallèles pour accomplir leurs tâches respectives. Un bon exemple de multithreading est le navigateur, où vous pouvez faire défiler les pages tout en téléchargeant des applets ou des images Java, lire des animations et des sons lors de l'accès à de nouvelles pages, imprimer des fichiers, etc.
L'avantage du multi-threading est qu'il peut améliorer l'utilisation du processeur - aucun programmeur ne veut que son programme n'ait rien à faire la plupart du temps. Dans un programme multi-thread, lorsqu'un thread doit attendre, Le processeur peut exécuter d'autres threads au lieu d'attendre, ce qui améliore considérablement l'efficacité du programme.
Cependant, nous devons également reconnaître les aspects négatifs des threads eux-mêmes qui peuvent affecter les performances du système afin d'utiliser correctement les threads :
Les threads sont également des programmes, les threads doivent donc occuper de la mémoire. Plus les threads occupent de la mémoire,
Plusieurs threads nécessitent une coordination et une gestion, donc du temps CPU est nécessaire pour suivre les threads
L'accès aux ressources partagées entre les threads s'affectera mutuellement et le problème de la concurrence pour les ressources partagées doit être résolu. .
Trop de fils de discussion entraîneront Le contrôle est trop complexe et peut éventuellement provoquer de nombreux bugs
Sur la base de la compréhension ci-dessus, nous pouvons utiliser une métaphore pour approfondir notre compréhension. Supposons qu'il existe une entreprise avec de nombreux employés qui accomplissent leurs propres tâches. Nous pouvons alors considérer cette entreprise fonctionnant normalement comme un processus, et les employés de l'entreprise sont des fils. Une entreprise doit avoir au moins un employé. De même, un processus doit avoir au moins un thread. Dans une entreprise, vous pouvez avoir un seul employé pour tout faire, mais l'efficacité n'est évidemment pas élevée, et il est impossible pour une entreprise composée d'une seule personne de se développer ; un programme peut également utiliser un seul thread pour faire des choses, en fait, certaines sont obsolètes. Cela est vrai pour des langages tels que fortune et basic, mais comme dans une entreprise individuelle, l'efficacité est très faible si vous créez un gros programme, l'efficacité est encore plus faible - en fait, il n'y a presque pas de thread unique. logiciel commercial maintenant. Plus il y a d'employés dans l'entreprise, plus le patron doit les payer cher, et il doit dépenser beaucoup d'énergie pour les gérer et coordonner les conflits et les intérêts entre eux, il en va de même pour le programme, plus il y a de fils de discussion ; , plus les ressources sont consommées, ce qui nécessite que du temps CPU soit utilisé pour suivre les threads et que des problèmes tels que le blocage et la synchronisation doivent être résolus. Bref, si vous ne voulez pas que votre entreprise soit qualifiée de « skin bag company », vous devez avoir quelques employés supplémentaires ; si vous ne voulez pas que votre programme ait l'air enfantin, introduisez le multi-threading dans votre programme !
Cet article discutera du mécanisme multi-thread dans la programmation C# et résoudra des problèmes tels que le contrôle des threads et la communication multi-thread à travers quelques exemples. Afin d'éviter les étapes fastidieuses de création d'une interface graphique et d'aborder plus clairement la nature des threads, tous les programmes suivants sont des programmes console. La fonction Console.ReadLine() à la fin du programme consiste à arrêter le programme à mi-chemin afin que vous puissiez. voir clairement le résultat du processus d’exécution.
D'accord, assez de bêtises, faisons l'expérience du C# multithread !
2. Manipuler un fil
Lorsqu'un programme est exécuté, il y a au moins un fil principal Le petit programme suivant peut donner aux lecteurs une impression intuitive :
[CODE]
//SystemThread.cs
using System;
using System.Threading;
namespace ThreadTest
{ STAThread]
Static void Main(string[] args )
(Thread.CurrentThread.Name "'Status:" Thread.CurrentThread.ThreadState);
Console.ReadLine();
🎜>Que voyez-vous après la compilation et l'exécution ? Oui, le programme produira le résultat suivant :
Statut du thread système : en cours d'exécution
Ici, nous obtenons le thread en cours d'exécution via la propriété statique CurrentThread de la classe Thread. L'attribut Name reçoit la valeur "System Thread", et enfin son état actuel (ThreadState) est affiché. Les propriétés dites statiques sont des propriétés communes à tous les objets de cette classe. Quel que soit le nombre d'instances de cette classe que vous créez, il n'y a qu'une seule propriété statique de la classe en mémoire. Il est facile de comprendre pourquoi CurrentThread est statique : bien que plusieurs threads existent en même temps, le CPU ne peut en exécuter qu'un à un certain moment.
Comme démontré par le programme ci-dessus, nous créons et contrôlons les threads via la classe Thread. Notez que dans l'en-tête du programme, nous utilisons l'espace de noms suivant :
[CODE]
using System
using System.Threading;
[/CODE]
Dans la bibliothèque de classes du framework .net, toutes les classes liées aux applications de mécanisme multi-threading sont placées dans l'espace de noms System.Threading. Il fournit la classe Thread pour créer des threads, la classe ThreadPool pour gérer les pools de threads, etc. En outre, il fournit également des mécanismes pour résoudre des problèmes pratiques tels que les modalités d'exécution des threads, les blocages et la communication entre les threads. Si vous souhaitez utiliser le multithreading dans votre application, vous devez inclure cette classe. La classe Thread possède plusieurs méthodes cruciales, qui sont décrites comme suit :
Start() : démarre le thread
Sleep(int) : méthode statique, met le thread en cours en pause pendant le nombre de millisecondes spécifié
Abort() : Cette méthode est généralement utilisée pour terminer un thread.
Suspend() : Cette méthode ne termine pas le thread inachevé, elle suspend uniquement le thread et peut être reprise plus tard.
Resume() : Reprendre l'exécution du thread suspendu par la méthode Suspend()
Ce qui précède est le contenu de l'exploration préliminaire du mécanisme multi-threading de C# (1). veuillez faire attention au site Web PHP chinois (www .php.cn) !