[英]C++ Boost.Asio - tcp socket asynchronous write
場景:
在對象A(線程A)內部,異步讀取和寫入boost :: asio :: ip :: tcp :: socket。
對象B(線程B)將數據發布到對象A的數據隊列中。
對象A應盡快將數據寫入其數據隊列中。
如何有效地達到第三點?
現在我正在這樣做:
隊列中可能沒有數據。
socket-> async_send(數據,處理程序);
內部處理程序:回到第二點。
我擔心這種方法效率很低-大多數情況下,使用零長度數據調用async_send直到可以發送實際數據為止。
可能是更好的方法是在對象A內有一個附加線程,以便在發布新數據后立即在套接字上執行同步寫操作嗎? 從對象B的線程執行寫操作是毫無疑問的。
首先,除非您有充分的理由,否則我個人不會將其分解為每個對象1個線程。
相反,擁有一個共享的io_service
(只需通過引用A和B io_serice.run()
來傳遞它即可。然后在io_serice.run()
上有一個線程。
假設其中一個對象也是async_reading,則無需編寫長度為0的基准並在處理程序中創建循環。 只需將async_write
安排async_write
時輸入數據。
“ 對象A應該盡快將數據寫入其數據隊列中 ”可能被理解為等待C ++的未來,因此您檢查答案並確認boost :: asio :: example ,最后但並非最不重要的一點是,我認為有一些改進您的“ 數據隊列 ”中將要求您可以看看該答案 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.