Frage

Der Versuch, Asio zu lernen, und ich bin im Anschluss an die Beispiele von der Website.

Warum ist io_service benötigt und was es genau macht? Warum muß ich es zu fast allen anderen Funktionen zu senden, während asynchrone Operationen durchführt, warum kann es nicht „schaffen“ selbst nach der ersten „Bindung“.

War es hilfreich?

Lösung

Asio des io_service ist der Moderator auf asynchrone Funktionen für den Betrieb. Sobald ein Asynchron-Betrieb bereit ist, verwendet es eine der io_service laufende Threads Sie zurückrufen. Wenn kein solcher Thread existiert nutzt er seine eigene Innengewinde Sie anzurufen.

Betrachten Sie es als eine Warteschlange Operationen enthält. Es garantiert Ihnen, dass diese Operationen, wenn ausführen, werden nur so an den Fäden tun, der seine run() oder run_once() Methoden genannt, oder, wenn sie mit Steckdosen und async IO, dessen Innengewinde handelt.

Der Grund, warum Sie es jedem passieren muss, ist im Grunde, dass jemand für Asynchron-Operationen warten muss bereit sein, und wie in seiner eigenen Dokumentation io_service angegebenen Link ASIO auf den I / O-Dienst des Betriebssystems, so dass es der Plattform abstrahiert eigene Asynchron-Anmeldern, wie kqueue, /dev/pool/, epoll, und die Methoden auf diejenigen, wie select() zu betreiben.

In erster Linie habe ich am Ende mit io_service bis zu Rückrufe aus mehreren Teilen des Systems demultiplexen, und stellen Sie sicher, dass sie auf dem gleichen Thread arbeiten, wodurch die Notwendigkeit für explizite Sperren zu beseitigen, da die Vorgänge serialisiert werden. Es ist ein sehr mächtiges Idiom für asynchrone Anwendungen.

Sie können einen Blick auf die

scroll top