asynchrones Programmieren und Multi -Threading: Schlüsselunterschiede
asynchrone Programmierung und Multi -Threads sind oft verwirrt, aber sie sind völlig unterschiedliche Konzepte.
Asynchrones Programmieren
Der Kern der asynchronen Programmierung ist nicht -blockierender Operation
. Bei der Begegnung auf den Ausdruck "Warte" in der asynchronen Methode blockiert die Thread -Ausführung nicht, um die Aufgabe abzuschließen. Stattdessen wird der verbleibende Teil der Methode in eine Fortsetzung registriert und die Kontrolle des Kontrollrechts an den Anrufer der asynchronen Methode zahlt.Es ist wichtig, dass die asynchrone Methode keine zusätzlichen Threads
erstellen muss. Da die asynchrone Methode im aktuellen Synchronisationskontext ausgeführt wird, wird während der Aktivität nur Thread -Zeit verwendet. "Task.run" kann die Dense -Arbeit von CPU in den Hintergrund -Thread deinstallieren. Dies ist jedoch ungültig, wenn nur das Ergebnis auf das Ergebnis wartet.Multi -thread
Multi -Threads beinhaltet die Zuweisung von Aufgaben für mehrere Arbeitsfäden. Jeder Prozessor übernimmt die Zuordnungsaufgabe unabhängig. Koordinieren Sie diese Arbeitsfäden, um Ressourcenkonflikte zu verhindern und sicherzustellen, dass eine angemessene Vergütung die Komplexität erhöht. Eine einfache Metapher
Das Beispiel des Restaurants kann helfen, den Unterschied zwischen den beiden zu verstehen:
Synchron:
Zuerst die Eier braten und dann das Brot backen.Single -Threading:
Betrachten Sie das Beispiel von Jon Skeet:
beim Aufrufen von wird es einen asynchronen Betrieb auslösen, ohne den Anruf -Thread zu blockieren.
Registrieren Sie die verbleibende Methode als Fortsetzung und führen Sie aus, wenn die Länge der Website verfügbar ist. Beim Betrieb hier kann der Anrufer weiterhin andere Aufgaben ausführen.
Nach Abschluss wird die Ausführung fortgesetzt, und der Etikettentext wird mit der Länge der Website festgelegt.
<code class="language-c#">async void DisplayWebsiteLength ( object sender, EventArgs e ) { label.Text = "Fetching ..."; using ( HttpClient client = new HttpClient() ) { Task<string> task = client.GetStringAsync("http://csharpindepth.com"); string text = await task; label.Text = text.Length.ToString(); } }</code>
Das obige ist der detaillierte Inhalt vonAsynchrone Programmierung gegen Multithreading: Was ist der Unterschied?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!