试着学习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
需要的原因和工作原理.