Boost.Asio 的使用

Boost.Asio 库

io_context

1. 概念

io_context 是 Asio 库的核心事件循环和 IO 调度器,也是所有异步 I/O 事件处理的基础。工作逻辑为

  • 将需要监听的 IO 事件(如 socket 的读/写就绪、连接请求就绪)和对应的处理回调注册到 io_context 的事件管理体系中

  • 启用 io_context 的事件循环以后,会持续通过底层多路复用的机制检测已注册的事件状态……

  • 当检测到某个 IO 事件就绪以后,会自动调用执行该事件对应的上层回调函数,完成 IO 事件的处理

2. 和 epoll/iocp 的关系

io_context 是跨平台抽象层,epoll 只是其在 Linux 下的一种底层实现,类似

1
【上层:开发者代码】→ 【中间层:io_context(事件调度)】→ 【底层:操作系统IO多路复用(epoll/IOCP)】

用代码实现的话

  • 注册:将代码中 tcp::acceptor(监听套接字)、tcp::socket(通信套接字)和各种事件(端口监听,socket 读/写)等事件注册到 io_context,同时绑定自定义回调;

  • 传递:io_context 接收到注册请求后,会将对应的 socket 句柄、事件类型(读 / 写 / 连接)传递给底层的 epoll,完成 epoll 的事件注册;

  • 启动:调用 io_context.run() 启动事件循环,io_context 会调用 epoll 的 epoll_wait 方法,阻塞等待内核的事件就绪通知

  • 响应处理:有事件就绪,内核通过 epoll 向 io_context 发送就绪通知,然后调度执行开发者注册的上层回调函数

3. 核心特点

跨平台性:若你的服务端移植到 Windows,io_context 会自动切换为基于 IOCP 实现,你的上层代码无需任何修改,这是 io_context 最核心的价值(屏蔽了不同系统的底层 IO 差异);

不止封装 epollio_context 除了封装 IO 多路复用,还实现了事件调度、回调管理、线程池适配等功能,而 epoll 仅负责内核态的 IO 事件检测,无上层调度能力;


Boost.Asio 的使用
https://dxblacksmith.github.io/2026/01/29/Boost.Asio/
作者
DxBlackSmith
发布于
2026年1月29日
许可协议