首页 > 解决方案 > 什么是 asio::io_service?

问题描述

我正在研究异步 I/O。我知道 select()、poll() 和 epoll()。我很好奇的是使用 boost::asio 时的异步 I/O。作为调查的结果,使用了io_service。select()、poll() 和 epoll 中的哪一个?

标签: c++selectepollasio

解决方案


asio::io_service 已过时。

在较新的 boost 版本中,它被 asio::io_context 取代。

io_context (formly io_service) 主要目的是对 asio 库中的对象执行异步操作,例如。套接字,接受器等,根据文档

... I/O 对象上的同步操作隐式运行 io_context 对象以进行单个操作。io_context 必须调用 io_context 函数 run()、run_one()、run_for()、run_until()、poll() 或 poll_one() 才能代表 C++ 程序执行异步操作。异步操作已完成的通知是通过调用关联的处理程序来传递的。处理程序仅由当前正在调用 io_context... 的 run()、run_one()、run_for()、run_until()、poll() 或 poll_one() 的任何重载的线程调用。

基本上,您将要执行的任务发送到 io_context(async_... 函数),并且 io_context 负责执行这些任务(可能在线程或线程池上)并调用提供的回调(=handler)。

它通常在内部使用某些版本的任务窃取来在线程池中的线程上进行有效的任务分配。


推荐阅读