什么是asio :: io_service?

问题描述

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

解决方法

asio :: io_service已过时。

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

io_context(以前为io_service)的主要目的是为asio库中的对象执行异步操作。套接字,接受器等,根据documentation

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

基本上,您将要执行的任务发送到io_context(async _...函数),而io_context负责执行这些任务(可能在线程或线程池上)并调用提供的回调(=处理程序)。 / p>

通常在内部使用task-stealing的某些版本来在线程池中的线程上高效地分配任务。