尝试学习 asio,我正在按照网站上的示例进行操作。

为什么需要 io_service 以及它的具体作用是什么?为什么我需要在执行异步操作时将其发送到几乎所有其他函数,为什么它不能在第一次“绑定”后“创建”自身。

有帮助吗?

解决方案

阿西奥的 io_service 是操作异步函数的促进者。一旦异步操作准备就绪,它就会使用以下之一 io_service正在运行线程给您回电。如果不存在这样的线程,它会使用自己的内部线程来调用您。

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

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

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

你可以看看 核心文档 更好地了解原因 io_service 是需要的以及它的作用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top