Grand Central Dispatch async-vs-sync
Bin ich beim Lesen der docs auf dispatch-Warteschlangen für GCD, und Sie sagen, dass die queues sind FIFO, also ich bin woundering welche Auswirkungen hat dies auf async /sync löst?
aus meinem verstehen async führt, die Dinge in der Reihenfolge, in der es bekommt Dinge während sync ausführt, Dinge, die serial..
aber wenn Sie schreiben, Ihre GCD-code, den Sie entscheiden, in welcher Reihenfolge die Dinge passieren.. so lange, wie Sie wissen, was Los ist in Ihrem code, den Sie sollten wissen, in welcher Reihenfolge etwas ausgeführt..
meine Fragen sind, wheres der Vorteil der asynchronen hier? bin ich etwas fehlt in meinem Verständnis dieser beiden Dinge.
Du musst angemeldet sein, um einen Kommentar abzugeben.
sync bedeutet, dass die Funktion BLOCKIERT den aktuellen thread, bis es abgeschlossen wurde, async heißt, es wird behandelt, in den hintergrund und die Funktion WIRD NICHT BLOCKIERT den aktuellen thread.
Wenn Sie möchten, dass die serielle Ausführung von Blöcken überprüfen Sie heraus die Schaffung eine serielle dispatch queue
Die erste Antwort ist nicht ganz vollständig, leider. Ja, die sync-block-und async nicht, aber es gibt zusätzliche Semantik zu berücksichtigen. Aufruf dispatch_sync() wird auch dazu führen, Ihren code zu warten, bis jede und jeden ausstehenden posten auf, die Warteschlange Ausführung beendet hat, macht es auch ein Synchronisations-Punkt für diese Arbeit. dispatch_async() wird senden Sie uns einfach die Arbeit, die auf die Warteschlange und sofort zurück, nach dem es ausgeführt wird "irgendwann" und Sie brauchen, um zu verfolgen Fertigstellung dieser Arbeit in irgendeiner anderen Art und Weise (in der Regel durch die Verschachtelung eine dispatch_async in einem anderen dispatch_async - siehe die man-Seite zum Beispiel).
Aus der man-page:
Aufgaben können synchron oder asynchron ausgeführt werden.
Synchrone - Funktion gibt die Steuerung an die aktuelle Warteschlange erst, nachdem Aufgabe beendet ist. Es blockiert die Warteschlange und wartet, bis die Aufgabe beendet ist.
Asynchrone - Funktion gibt die Steuerung an die aktuelle queue direkt nach Aufgabe gesendet wurde, durchgeführt werden, wenn die andere Warteschlange. Es muss nicht warten, bis der Vorgang abgeschlossen ist. Es nicht zu blockieren die Warteschlange.
Nur im Asynchronen wir können hinzufügen Verzögerung ->
asyncAfter(deadline: 10..
Mit GCD können Sie Versand eine Aufgabe entweder
synchronously
oderasynchronously
.Einen
synchronous
- Funktion gibt die Steuerung an den Aufrufer, nachdem die Aufgabe abgeschlossen ist. Sie planen eine Arbeitseinheit, die synchron durch den AufrufDispatchQueue.sync(execute:)
.Einer
asynchronous
Funktion liefert sofort eine Rückgabe, der Bestellung der Aufgabe zu beginnen, aber nicht zu warten, für Sie zu vervollständigen. Somit ist eine asynchrone Funktion nicht blockiert den aktuellen thread der Ausführung von Verfahren auf, um die nächste Funktion. Sie planen eine Arbeitseinheit, die asynchron durch den AufrufDispatchQueue.async(execute:)
.Lesen Sie mehr hier
Die Quelle ist hier