首页 > 解决方案 > io_context 到底是什么?

问题描述

我一直在浏览 boost asio 库,其中大多数对象都需要 io_context 对象作为构造函数的参数。我已经阅读了什么 io_context 对象,根据文档说明它是

io_context 类为异步 I/O 对象的用户提供核心 I/O 功能

这让我感到困惑,因为这不是iostream所做的。我真的很确定我遗漏了一些东西,请帮我澄清一下,而且我没有看到I/O 对象套接字之间有太大区别,除了套接字的事实可用于在两个设备之间交换数据,而 I/O 对象使我们能够与我们的计算机交换数据。此时我真的很困惑!

标签: c++boostboost-asio

解决方案


io_context包含运行基于 、 或其他平台特定调用的事件循环所需的状态selectepoll并将诸如套接字就绪、计时器、信号、空闲等事件分派到用户已注册的回调。不同套接字、计时器等的许多回调可以用一个注册io_contextio_context不做 I/O,但是当 I/O 可以以非阻塞方式完成时,它会调用那些回调,例如数据已经到达并且套接字准备好读取,并且回调执行实际的非阻塞 I/O .

有关详细信息,请参阅Basic Boost.Asio Anatomy 。

其他流行的事件循环是libeventlibuv

C10K 问题很老,但对异步 I/O 的主题很有启发性。


C++20 协程引入了一种新的编程模型,它的优点是更易于编写和读取,并减轻了非阻塞 I/O 代码中固有的回调地狱。Boost.Asio 支持协程


推荐阅读