Ho letto che non sono consigliate più operazioni su socket da thread diversi. Ma cosa succede se chiamo dallo stesso thread socket.async_read e successivo socket.async_write (senza aspettare che il precedente termini)? Posso confermare che il callback appropriato verrà eseguito quando una di queste operazioni è completata?Boost.asio: posso fare async_read e async_write contemporaneamente da un thread?
6
A
risposta
11
Ho trovato che sì, è possibile avere un singolo in sospeso async_read
e un singolo in sospeso async_write
sullo stesso socket senza problemi. Quando si chiama il metodo io_service::run()
, i callback verranno completati come previsto.
L'emissione di più async_reads sullo stesso socket o più async_writes sullo stesso socket può comportare un comportamento imprevisto, a seconda del tipo di socket in questione. In particolare, l'utilizzo di più async_writes sullo stesso socket TCP può comportare l'uscita di dati in un ordine diverso rispetto a quanto originariamente previsto e il mescolamento di dati inviati. In UDP, potrebbe essere più ragionevole, ma lo raccomanderei comunque.
Problemi correlati
- 1. Boost.Asio: Operazione annullata a async_read
- 2. Quanti thread posso eseguire contemporaneamente?
- 3. Utilizzando socket SSL e socket non SSL contemporaneamente in Boost.Asio?
- 4. Le funzioni di ricezione/invio del socket di boost.asio sono sbagliate?
- 5. Posso generare un thread da un servlet?
- 6. risultati da Boost.Asio resolver differ
- 7. collegamento boost.asio
- 8. È thread-safe resettare e copiare shared_ptr contemporaneamente?
- 9. Boost.Asio errore di collegamento
- 10. Come creare una presa Boost.Asio da un socket nativo?
- 11. Come posso restituire un valore da un thread in Ruby?
- 12. Posso leggere da un socket in modo sincrono utilizzando Boost.Asio con un timeout su un servizio I/O con multithreading?
- 13. Posso richiamare XMPPConnection.sendPacket da thread simultanei?
- 14. Due thread possono accedere contemporaneamente a un metodo sincronizzato?
- 15. Uscire da un thread
- 16. Come posso restituire un errore da un thread scoped_threadpool?
- 17. Più thread possono scrivere contemporaneamente in un file, se tutti i thread scrivono in posizioni diverse?
- 18. Posso leggere e scrivere su un database SQLite contemporaneamente da più connessioni?
- 19. Boost.Asio sbagliato locale endpoint
- 20. Boost.Asio libreria HTTP
- 21. manipolazione in Boost.Asio
- 22. Posso eseguire un thread all'interno di un thread in java?
- 23. boost :: asio :: async_write() rispetto boost :: asio :: write()
- 24. C'è un modo per aprire più file contemporaneamente da vim?
- 25. EOF in async_read() in boost :: asio
- 26. Thread WPF e GUI come accedere all'oggetto da thread diversi?
- 27. Come posso eliminare un thread in python
- 28. È un codice thread-safe? Come posso renderlo thread-safe?
- 29. Posso assegnare 2 variabili contemporaneamente al C++?
- 30. Registrare ed elaborare l'audio contemporaneamente a Thread in Android
stai chiedendo informazioni sui socket TCP? –