io_service,为什么以及如何使用它?

时间:2009-04-04 15:13:40

标签: c++ boost boost-asio

尝试学习asio,我正在关注网站上的例子。

为什么需要io_service,它究竟做了什么?为什么我需要在执行异步操作时将它发送到几乎所有其他函数,为什么它不能在第一次“绑定”后“创建”自己。

1 个答案:

答案 0 :(得分:48)

Asio的io_service是操作异步函数的促进者。异步操作准备就绪后,它会使用io_service个正在运行的线程之一来回拨您。如果不存在这样的线程,它使用自己的内部线程来呼叫你。

将其视为包含操作的队列。它保证这些操作在运行时只会在调用其run()run_once()方法的线程上执行,或者在处理套接字和异步IO时,它的内部线程。

您必须将其传递给每个人的原因基本上是有人必须等待异步操作准备好,并且如其自己的文档中所述io_service是ASIO到操作系统的I / O服务的链接,因此它抽象出平台自己的异步通知程序,例如kqueue/dev/pool/epoll以及对其进行操作的方法,例如select()

主要是我最终使用io_service从系统的多个部分解复用回调,并确保它们在同一个线程上运行,从而无需显式锁定,因为操作是序列化的。它是异步应用程序的一个非常强大的习惯用法。

您可以查看core documentation,以便更好地了解为什么需要io_service及其作用。