Heim Backend-Entwicklung C#.Net-Tutorial Eine vorläufige Studie zum Multithreading-Mechanismus von C# (1)

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

Dec 21, 2016 pm 02:58 PM

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)!


Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Active Directory mit C# Active Directory mit C# Sep 03, 2024 pm 03:33 PM

Leitfaden zu Active Directory mit C#. Hier besprechen wir die Einführung und die Funktionsweise von Active Directory in C# sowie die Syntax und das Beispiel.

C#-Serialisierung C#-Serialisierung Sep 03, 2024 pm 03:30 PM

Leitfaden zur C#-Serialisierung. Hier besprechen wir die Einführung, die Schritte des C#-Serialisierungsobjekts, die Funktionsweise bzw. das Beispiel.

Zufallszahlengenerator in C# Zufallszahlengenerator in C# Sep 03, 2024 pm 03:34 PM

Leitfaden zum Zufallszahlengenerator in C#. Hier besprechen wir die Funktionsweise des Zufallszahlengenerators, das Konzept von Pseudozufallszahlen und sicheren Zahlen.

C#-Datenrasteransicht C#-Datenrasteransicht Sep 03, 2024 pm 03:32 PM

Leitfaden zur C#-Datenrasteransicht. Hier diskutieren wir die Beispiele, wie eine Datenrasteransicht aus der SQL-Datenbank oder einer Excel-Datei geladen und exportiert werden kann.

Muster in C# Muster in C# Sep 03, 2024 pm 03:33 PM

Leitfaden zu Mustern in C#. Hier besprechen wir die Einführung und die drei wichtigsten Arten von Mustern in C# zusammen mit ihren Beispielen und der Code-Implementierung.

Primzahlen in C# Primzahlen in C# Sep 03, 2024 pm 03:35 PM

Leitfaden zu Primzahlen in C#. Hier besprechen wir die Einführung und Beispiele von Primzahlen in C# sowie die Codeimplementierung.

Fakultät in C# Fakultät in C# Sep 03, 2024 pm 03:34 PM

Leitfaden zur Fakultät in C#. Hier diskutieren wir die Einführung in die Fakultät in C# zusammen mit verschiedenen Beispielen und Code-Implementierungen.

Der Unterschied zwischen Multithreading und asynchronem C# Der Unterschied zwischen Multithreading und asynchronem C# Apr 03, 2025 pm 02:57 PM

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.

See all articles