簡體   English   中英

提升ASIO - 什么是異步

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM