Frage

Wird ein asynchroner Aufruf schafft immer einen neuen Thread? Was ist der Unterschied zwischen den beiden?

Wird ein asynchroner Aufruf immer erstellen oder einen neuen Thread verwenden?

Wikipedia sagt :

  

In der Computerprogrammierung, sind asynchrone Ereignisse diejenigen, unabhängig von dem Hauptprogrammablauf auftreten. Asynchrone Aktionen sind Aktionen in einem nicht-blockierende Schema ausgeführt wird, den Hauptprogrammablauf ermöglicht die Verarbeitung fortzusetzen.

Ich weiß, Asynchron-Anrufe können auf einzelne Threads getan werden? Wie ist das möglich?

War es hilfreich?

Lösung

Diese Frage wird in der Nähe zu allgemein stopfen zu beantworten.

Im allgemeinen Fall, ein asynchroner Aufruf nicht unbedingt einen neuen Thread erstellen. Das ist eine Möglichkeit, es zu implementieren, mit einem bereits bestehenden Thread-Pool oder externer Prozess andere Wege zu sein. Es hängt stark von Sprache, Objektmodell (falls vorhanden), und Laufzeitumgebung.

Asynchron bedeutet, nur der aufrufende Thread nicht sitzen und auf die Antwort warten, noch die asynchrone Aktivität geschieht in dem aufrufenden Thread.

Darüber hinaus, Sie gehen zu müssen spezifischere erhalten.

Andere Tipps

Jedes Mal, wenn die Operation, die asynchron die CPU erfordern nicht geschehen muss Arbeit zu tun, kann dieser Vorgang ohne Laichen anderen Thread ausgeführt werden. Wenn zum Beispiel des Asynchron Betrieb I / O, wird die CPU muss nicht warten, bis das I / O zu vervollständigen. Es muss nur die Operation starten, und kann dann zu anderen Arbeiten bewegen, während die I / O-Hardware (Festplatten-Controller, Netzwerkschnittstelle, etc.) funktioniert die E / A-Arbeit. Die Hardware lässt die CPU wissen, wann es durch Unterbrechung der CPU fertig ist, und das Betriebssystem liefert dann das Ereignis auf Ihre Bewerbung.

Häufig höhere Ebene Abstraktionen und APIs, verfügen nicht über den zugrunde liegenden des asynchronen API von den OS verfügbar und die zugrunde liegenden Hardware. In diesen Fällen ist es in der Regel einfacher Threads erstellen asynchrone Operationen zu tun, auch wenn der erzeugte Thread auf einer I / O-Operation nur darauf warten.

Wenn der asynchrone Betrieb die CPU zu tun erfordert, dann in der Regel, dass der Betrieb in einem anderen Thread, um geschehen hat es wirklich asynchron zu sein. Selbst dann wird es wirklich nur asynchron sein, wenn es mehr als eine Ausführungseinheit ist.

Nein, asynchrone Aufrufe nicht immer Threads beinhalten.

Sie haben typischerweise eine Art von Operation starten, die mit dem Anrufer parallel weiter. Aber diese Operation könnte von einem anderen Prozess behandelt werden, durch das Betriebssystem, die von anderer Hardware (wie ein Festplattencontroller), die von einem anderen Computer im Netzwerk oder von einem Menschen. Themen sind nicht der einzige Weg, um Dinge parallel zu erledigen.

Multi Threading bezieht sich auf mehr als eine Operation in dem gleichen Prozess geschieht. Während Asynchron-Programmierung erstreckt sich über Prozesse. Zum Beispiel, wenn meine Operationen einen Webdienst aufruft, warten Der Faden muss nicht bis in die Web-Service zurückkehrt. Hier verwenden wir Asynchron-Programmierung, die das Gewinde nicht warten, für einen Prozess in einer anderen Maschine abschließen können. Und wenn es beginnt Antwort des Webservice bekommen kann er den Haupt-Thread unterbrechen, dass Web-Service zu sagen, hat die Anforderung abgeschlossen Verarbeitung. Nun ist der Haupt-Thread kann das Ergebnis verarbeiten.

JavaScript ist single-threaded und asynchron. Wenn Sie XmlHttpRequest verwenden, zum Beispiel, bieten Sie es mit einer Callback-Funktion, die asynchron ausgeführt wird, wenn die Antwort zurückgibt.

John Resig hat eine gute Erklärung für die damit verbundene Frage, wie Timer Arbeit in JavaScript .

Fenster immer asynchrone Verarbeitung, da die nicht präemptiven Zeiten (Versionen 2.13, 3.0, 3.1, usw.) hatten mit der Nachrichtenschleife, Art und Weise vor echte Fäden unterstützen. So Ihre Frage zu beantworten, nein, es ist nicht notwendig, einen Thread zu erstellen asynchrone Verarbeitung durchzuführen.

Asynchronous Anrufe brauchen nicht einmal auf demselben System / Gerät als man den Aufruf Aufruf auftreten. Wenn also die Frage ist, ob ein asynchroner Aufruf einen Thread im aktuellen Prozess erforderlich ist, lautet die Antwort nein. Es muss jedoch ein Ausführungs-Thread irgendwo eine Verarbeitung der asynchronen Anfrage.

Thread der Ausführung ist ein vager Begriff. In einem kooperativen Tasking-Systeme wie den frühen Macintosh und Windows OS'es könnte der Thread der Ausführung einfach den gleichen Prozess sein, der die Anforderung läuft einen anderen Stapel, Befehlszeiger, etc ... Jedoch gemacht, wenn die Leute über asynchrone Aufrufe sprechen im Allgemeinen bedeuten sie typischerweise Anrufe, die von einem anderen Thread verarbeitet werden, wenn sie Intra-Prozess (dh innerhalb des gleichen Prozesses) oder durch einen anderen Prozess, wenn es inter-Prozess.

sei bemerkt, dass die Interprozess (oder Inter) Kommunikation (IPC) wird üblicherweise intra-Prozess-Kommunikation umfassen verallgemeinert, da die Techniken zum Verriegeln und Synchronisieren von Daten sind in der Regel gleich, unabhängig davon, welcher Prozess die einzelnen Fäden Ausführung zulaufen.

Einige Systeme können Sie die Vorteile der Gleichzeitigkeit im Kernel für einige Einrichtungen Rückrufe mit zu nehmen. Für einen eher obskuren Fall wurden asynchrone IO Rückrufe verwendet Internet zu implementieren, nicht blockierende kappt zurück in den nicht-präemptiven Multitasking Tage von Mac-System 6-8.

Auf diese Weise können die gleichzeitige Ausführung Ströme "in" Sie ohne Gewinde programmieren als solche .

Asynchron bedeutet nur, dass Sie Ihr Programm für etwas (Funktionsaufruf, Gerät, etc.) wartet nicht blockieren zu beenden. Es kann in einem separaten Thread ausgeführt werden, aber es ist auch üblich, einen eigenen Thread für synchrone Aufgaben zu nutzen und über eine Art von Event-System kommunizieren und somit asynchron-ähnliches Verhalten erzielen.

Es gibt Beispiele für Single-Threaded-Asynchron-Programme. So etwas wie:

...do something
...send some async request
while (not done)
    ...do something else
    ...do async check for results

Die Art des asynchronen Aufrufs ist so, dass, wenn Sie die Anwendung wollen weiter ausgeführt werden, während der Anruf im Gang ist, müssen Sie entweder auf Spawn ein neuer Thread, oder zumindest nutzen Sie ein anderer Thread, dass Sie nur für die Zwecke der Behandlung von asynchronen Rückrufe angelegt haben.

Manchmal, je nach Situation, können Sie eine asynchrone Methode aufzurufen, aber es dem Benutzer synchron zu sein scheinen zu machen sein (das heißt Block, bis die asynchrone Methode signalisiert hat, dass es abgeschlossen ist). Dies kann durch die Win32-APIs wie WaitForSingleObject erreicht werden.

Eine asynchroner Betrieb ist eine Operation, die nach den eingeleiteten im Hintergrund weiter, ohne dass der Anrufer gezwungen zu warten, um es vor dem Ausführen von anderem Code zu beenden.

Anstatt das aufrufende Programm (oder Thread) zu blockieren, bis eine Antwort eintrifft, ein asynchrone Implementierung (auch non-blocking genannt) eine Anfrage an die Datenbank oder Web-Service senden oder was auch immer, dann sofort zurück, lassen Sie Ihr Programm fortsetzen Ausführen fremden Codes, während der Remote-Dienst eine Antwort sendet. Sobald die Antwort eintrifft, wird das System einen Callback ausgeführt (entweder auf der Nachrichtenschleife oder in einem separaten Completion-Port IO Gewinden, abhängig von der Umgebung), der Code der Antwort handhaben lassen.

Multi-Threading Mittel laufen mehr als einen Ausführungs-Thread zu einem Zeitpunkt. In diesem Modell sind alle Operationen noch synchron, aber die CPU mehr Threads von synchronen Operationen zur gleichen Zeit ausgeführt werden.

Multi-Threading meisten Sinn macht, wenn mehrere Aufruf (und unabhängig) CPU-gebundenen Operationen auf einem Multi-Core-Prozessor. Zum Beispiel kann ein Programm, das für jedes Pixel in einem Bild könnte teilt das Bild in ein Band für jeden CPU-Kern, dann analysiert jeden Streifen in einem eigenen Thread zur gleichen Zeit unabhängig analysiert.

Lesen Sie hier mehr - https: // blog. slaks.net/2014-12-23/parallelism-async-threading-explained/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top