2017-02-04 8 views
0

Wir wissen:Warum boost :: aio ist asynchron, wenn ihre Umsetzung auf epoll (synchron) basiert

(1) epoll ist synchron, basierend auf Benutzerabfrage/System informieren. Eine While-Schleife wird verwendet, um alle aufgeweckten Fds aufzurufen.

(2) boost :: asio deklariert sich selbst als "asynchron", aber seine Implementierung unter Linux verwendet epoll.

Meine Frage ist: Wie können Sie "asyn" mit einem "syn" Systemaufruf implementieren? Es sei denn, Sie verwenden einige Kernel/System unterstützte AIO-Schnittstelle, oder?

Bitte helfen Sie meine Verwirrungen zu korrigieren. Vielen Dank!

Antwort

1

"Synchron" bezieht sich normalerweise auf eine Operation, die die Steuerung erst wieder an den Aufrufer zurückgibt, wenn sie abgeschlossen ist.

epoll ist synchron in dem Sinne, dass seine Operation (die Rückgabe von fds mit ausstehenden Vervollständigungen/Aktionen) zu dem Zeitpunkt abgeschlossen ist, zu dem es zurückkehrt.

Lesen von oder Schreiben in einen Socket ist jedoch immer noch asynchron in dem Sinne, dass die Operation zum Lesen oder Schreiben immer noch nicht abgeschlossen ist, wenn der Funktionsaufruf zurückkehrt. Die eigentliche E/A-Arbeit kann asynchron ausgeführt werden, und epoll wird Ihnen sagen, wenn es fertig ist. Die Arbeit wird unabhängig davon ausgeführt, ob und wann Sie epoll, epoll anrufen, ist nur der Mechanismus, um die Abschlüsse zurück zu Ihnen zu signalisieren, nicht die Funktion, die die Arbeit ausführt.

+0

"Die eigentliche E/A-Arbeit erfolgt asynchron" => "Die eigentliche E/A-Arbeit * kann * asynchron erfolgen" und du bist gut :) –

Verwandte Themen