Heim  >  Artikel  >  Backend-Entwicklung  >  Eine vorläufige Studie zum Multithreading-Mechanismus von C# (1)

Eine vorläufige Studie zum Multithreading-Mechanismus von C# (1)

黄舟
黄舟Original
2016-12-21 14:58:26997Durchsuche

1. Das Konzept des Multithreadings

Windows ist ein Multitasking-System. Wenn Sie Windows 2000 und höher verwenden, können Sie die aktuell auf dem System ausgeführten Programme anzeigen Task-Manager-Prozess. Was ist ein Prozess? Wenn ein Programm ausgeführt wird, handelt es sich um einen Prozess. Der Prozess bezieht sich auf das laufende Programm und die vom Programm verwendeten Speicher- und Systemressourcen. Ein Prozess besteht aus mehreren Threads. Jeder Thread verfügt über ein eigenes privates Register (Stapelzeiger, Programmzähler usw.), aber der Codebereich wird gemeinsam genutzt, dh verschiedene Threads können ausgeführt werden die gleiche Funktion. Multithreading bedeutet, dass ein Programm mehrere Ausführungsströme enthält, d. h. mehrere verschiedene Threads können gleichzeitig in einem Programm ausgeführt werden, um unterschiedliche Aufgaben auszuführen. Dies bedeutet, dass ein einzelnes Programm mehrere parallele Ausführungsthreads erstellen darf, um ihre jeweiligen Aufgaben auszuführen. Ein gutes Beispiel für Multithreading ist der Browser, mit dem Sie beim Herunterladen von Java-Applets oder Bildern durch Seiten scrollen, beim Zugriff auf neue Seiten Animationen und Sounds abspielen, Dateien drucken usw. können.

Der Vorteil von Multithreading besteht darin, dass es die CPU-Auslastung verbessern kann – kein Programmierer möchte, dass sein Programm die meiste Zeit nichts zu tun hat. Wenn ein Thread in einem Multithread-Programm warten muss, Die CPU kann andere Threads ausführen, anstatt zu warten, was die Effizienz des Programms erheblich verbessert.

Allerdings müssen wir auch die nachteiligen Aspekte von Threads selbst erkennen, die sich auf die Systemleistung auswirken können, um Threads richtig zu verwenden:

Threads sind auch Programme, daher müssen Threads Speicher belegen. Je mehr Threads Speicher belegen,
Mehrere Threads erfordern Koordination und Verwaltung, sodass CPU-Zeit zum Verfolgen von Threads benötigt wird.
Der Zugriff auf gemeinsam genutzte Ressourcen zwischen Threads wirkt sich gegenseitig aus und das Problem des Wettbewerbs um gemeinsam genutzte Ressourcen muss gelöst werden .
Zu viele Threads führen dazu, dass die Steuerung zu komplex ist und möglicherweise viele Fehler verursacht.

Basierend auf dem obigen Verständnis können wir eine Metapher verwenden, um unser Verständnis zu vertiefen. Angenommen, es gibt ein Unternehmen mit vielen Mitarbeitern, die ihre eigenen Aufgaben erfüllen. Dann können wir uns dieses normal funktionierende Unternehmen als einen Prozess vorstellen, und die Mitarbeiter im Unternehmen sind Threads. Ein Unternehmen muss mindestens einen Mitarbeiter haben. Ebenso muss ein Prozess mindestens einen Thread haben. In einem Unternehmen kann ein Mitarbeiter alles erledigen, aber die Effizienz ist offensichtlich nicht hoch, und es ist für ein Ein-Personen-Unternehmen unmöglich, Dinge nur mit einem Thread zu erledigen Dies gilt für Sprachen wie Fortune und Basic, aber wie bei einem Ein-Personen-Unternehmen ist die Effizienz sehr gering. Wenn Sie ein großes Programm erstellen, ist die Effizienz sogar noch geringer – tatsächlich gibt es fast keine Single-Threaded-Programme kommerzielle Software jetzt. Je mehr Mitarbeiter es im Unternehmen gibt, desto mehr muss der Chef ihnen bezahlen und er muss viel Energie aufwenden, um sie zu verwalten und die Konflikte und Interessen zwischen ihnen zu koordinieren. Dasselbe gilt für das Programm, desto mehr Threads Je mehr Ressourcen verbraucht werden, desto mehr CPU-Zeit wird zum Verfolgen von Threads benötigt und Probleme wie Deadlock und Synchronisierung müssen gelöst werden. Kurz gesagt: Wenn Sie nicht möchten, dass Ihr Unternehmen als „Skin-Bag-Unternehmen“ bezeichnet wird, müssen Sie ein paar mehr Mitarbeiter haben. Wenn Sie nicht möchten, dass Ihr Programm kindisch aussieht, führen Sie Multithreading in Ihr Programm ein!

In diesem Artikel wird der Multithreading-Mechanismus in der C#-Programmierung erläutert und anhand einiger Beispiele Probleme wie Thread-Steuerung und Multithread-Kommunikation gelöst. Um die mühsamen Schritte zum Erstellen einer GUI zu sparen und die Natur von Threads klarer zu verstehen, sind alle folgenden Programme Konsolenprogramme. Die Console.ReadLine () am Ende des Programms dient dazu, das Programm auf halbem Weg zu stoppen Sehen Sie sich den Ausführungsprozess deutlich an.

Okay, genug Unsinn, lasst uns Multithread-C# erleben!

2. Manipulieren Sie einen Thread

Wenn ein Programm ausgeführt wird, gibt es mindestens einen Hauptthread. Das folgende kleine Programm kann den Lesern einen intuitiven Eindruck vermitteln:

[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();

Was sehen Sie nach dem Kompilieren und Ausführen? Ja, das Programm erzeugt die folgende Ausgabe:

Status des System-Threads: Wird ausgeführt

Hier erhalten wir den aktuell ausgeführten Thread über die statische Eigenschaft CurrentThread der Thread-Klasse Dem Namensattribut wird der Wert „System Thread“ zugewiesen und schließlich wird dessen aktueller Zustand (ThreadState) ausgegeben. Die sogenannten statischen Eigenschaften sind Eigenschaften, die allen Objekten dieser Klasse gemeinsam sind. Unabhängig davon, wie viele Instanzen dieser Klasse Sie erstellen, gibt es nur eine statische Eigenschaft der Klasse im Speicher. Es ist leicht zu verstehen, warum CurrentThread statisch ist – obwohl mehrere Threads gleichzeitig existieren, kann die CPU zu einem bestimmten Zeitpunkt nur einen davon ausführen.

Wie das obige Programm zeigt, erstellen und steuern wir Threads über die Thread-Klasse. Beachten Sie, dass wir im Header des Programms den folgenden Namespace verwenden:
[CODE]
using System;
using System.Threading;

[/CODE]
In der .net Framework-Klassenbibliothek werden alle Klassen, die sich auf Multithreading-Mechanismusanwendungen beziehen, im System.Threading-Namespace platziert. Es stellt die Thread-Klasse zum Erstellen von Threads, die ThreadPool-Klasse zum Verwalten von Thread-Pools usw. bereit. Darüber hinaus bietet es Mechanismen zur Lösung praktischer Probleme wie Thread-Ausführungsvereinbarungen, Deadlocks und Kommunikation zwischen Threads. Wenn Sie Multithreading in Ihrer Anwendung verwenden möchten, müssen Sie diese Klasse einbinden. Die Thread-Klasse verfügt über mehrere wichtige Methoden, die wie folgt beschrieben werden:

Start(): Startet den Thread
Sleep(int): Statische Methode, hält den aktuellen Thread für die angegebene Anzahl von Millisekunden an
Abort(): Diese Methode wird normalerweise zum Beenden eines Threads verwendet.
Suspend(): Diese Methode beendet den unvollendeten Thread nicht, sondern unterbricht den Thread nur und kann später fortgesetzt werden.
Resume(): Setzt die Ausführung des Threads fort, der durch die Suspend()-Methode angehalten wurde.

Das Obige ist der Inhalt der vorläufigen Untersuchung des Multithreading-Mechanismus von C# (1). Weitere verwandte Inhalte finden Sie hier. Bitte beachten Sie die chinesische PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn