繁体   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