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