Asio io_service
è il facilitatore per il funzionamento su funzioni asincrone. Una volta che un'operazione asincrona è pronta, utilizza uno dei thread correnti di io_service
per richiamarti. Se nessun thread esiste, usa il proprio thread interno per chiamarti.
Pensa a una coda contenente operazioni. Ti garantisce che tali operazioni, quando eseguite, lo faranno solo sui thread che hanno chiamato i suoi metodi run()
o run_once()
, o quando si tratta di socket e AS asincroni, il suo thread interno.
Il motivo per cui è necessario passarlo a tutti è fondamentalmente che qualcuno deve attendere che le operazioni asincrone siano pronte, e come indicato nella propria documentazione io_service
è il collegamento ASIO al servizio I/O del sistema operativo in modo da asportare il i notificatori asincroni della stessa piattaforma, come kqueue
, /dev/pool/
, epoll
e i metodi per operare su quelli, ad esempio select()
.
Principalmente finisco per utilizzare io_service per richiamare demultiplex da diverse parti del sistema e assicurarmi che operino sullo stesso thread, eliminando la necessità di un blocco esplicito, poiché le operazioni sono serializzate. È un idioma molto potente per le applicazioni asincrone.
È possibile dare uno sguardo allo core documentation per ottenere una migliore comprensione del motivo per cui è necessario io_service
e che cosa fa.
fonte
2009-04-04 15:22:08
'In primo luogo finisco per usare io_service per richiamare demultiplex da diverse parti del sistema e assicurarmi che funzionino sullo stesso thread, (...)' Potresti per favore elaborare un po 'su questo idioma? – syntagma
@ ΔλЛ pubblichi semplicemente le operazioni su io_service e quando arriva il momento di eseguirle, sceglierà il thread corretto ed eseguirà, magari serializzato se usi un filamento per avvolgere le operazioni. – Berkus