42

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

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

4

1 回答 1

57

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

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

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

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

您可以查看核心文档,以更好地了解为什么io_service需要它以及它的作用。

于 2009-04-04T15:22:08.870 回答