[英]Boost ASIO - What is async
我一直在做很多閱讀,但我無法理解Boost ASIO中同步和異步調用之間的區別:它們是什么,它們是如何工作的,以及為什么選擇一個而不是另一個。
我的模型是一個服務器,它接受連接並將新連接附加到列表。 一個不同的線程在列表上循環,並在每個已注冊的連接數據可用時發送它們。 每次寫操作都應該是安全的。 它應該有一個超時,以便它不能掛起,它不應該分配任意大量的內存,或者通常導致主應用程序崩潰。
困惑: accept_async
與普通accept
有何不同? 是否接受為每個連接分配的新線程? 從示例中我看到,在接受連接后,會調用請求處理程序。 此請求處理程序必須告知接受者准備再次接受。 沒有什么關於這似乎異步。 如果requset處理程序掛起,則接受器阻塞。
在boost郵件列表中 ,OP被告知使用async_write
與計時器而不是常規write
。 在此配置中,我沒有看到任何異步行為或為什么建議它們。 從Boost文檔async_write
看起來比write
更危險,因為用戶在第一個完成之前不能再次調用async_write
。
異步調用立即返回。
這是重要的一點。
現在,如何控制異步操作完成后發生的“下一件事”? 你得到它,你提供完成處理程序 。
異步的優勢在於您可以在后台運行IO操作(或類似操作),而不必產生任何線程切換或同步開銷。 這樣,您可以在單個線程上同時處理許多異步控制流。
實際上,異步操作可能更復雜並且需要更多思考(例如,關於完成處理程序中使用的引用的生命周期)。 但是,當您需要它時,您需要它。
來自官方網站的Boost.Asio基本概述解釋得很好:
http://www.boost.org/doc/libs/1_61_0/doc/html/boost_asio/overview/core/basics.html
io_service對象處理多個操作。
應該仔細調用io_service.run()(可以解釋“危險的async_write”)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.