我正在尝试学习asio,并且正在跟随网站上的示例。
io_service是什么,为什么需要它,它具体做了什么?在执行异步操作时,为什么需要将它发送到几乎所有其他函数中,为什么不能在第一次“绑定”之后自行“创建”?
我正在尝试学习asio,并且正在跟随网站上的示例。
io_service是什么,为什么需要它,它具体做了什么?在执行异步操作时,为什么需要将它发送到几乎所有其他函数中,为什么不能在第一次“绑定”之后自行“创建”?
Asio的io_service
是异步函数操作的协调者。一旦异步操作准备就绪,它会使用io_service
运行的线程来回调您。如果不存在这样的线程,则使用其自身的内部线程来回调您。
将其视为包含操作的队列。它保证当运行这些操作时,仅在调用其run()
或run_once()
方法的线程上运行,或在处理套接字和异步IO时,在其内部线程上运行。
之所以必须将其传递给每个人,基本上是因为必须有人等待异步操作就绪,并且如其自身文档所述,io_service
是ASIO与操作系统I / O服务的链接,因此它抽象出平台本身的异步通知程序,例如kqueue
,/ dev / pool /
,epoll
,以及操作这些程序的方法,例如select()
。
主要我最终使用io_service
来对系统的多个部分进行回调解复用,并确保它们在同一线程上运行,消除了显式锁定的需要,因为操作是串行化的。对于异步应用程序来说,这是一个非常强大的惯用语。
您可以查看核心文档,以更好地了解为什么需要io_service
以及它的功能。