c++ - io_context 究竟是什么?

标签 c++ boost boost-asio

我一直在使用 boost asio 库,其中大多数对象都需要 io_context 对象作为构造函数的参数。我已经阅读了 io_context 对象,根据文档,它指出它是

The io_context class provides the core I/O functionality for users of the asynchronous I/O objects



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

最佳答案

io_context 包含运行事件循环所需的状态 select , epoll ,或其他特定于平台的调用和调度事件,例如套接字就绪、计时器、信号、空闲,到用户注册的回调。可以使用一个 io_context 注册针对不同套接字、计时器等的许多回调。 . io_context不执行 I/O,但当 I/O 可以以非阻塞方式完成时调用这些回调,例如数据已到达且套接字已准备好读取,回调执行实际的非阻塞 I/O。

Basic Boost.Asio Anatomy更多细节。

其他流行的事件循环是 libevent libuv

The C10K problem在异步 I/O 的主题上很旧但很有启发性。

C++20 coroutines引入一种新的编程模型,它具有更易于编写和读取的优点,并且可以缓解非阻塞 I/O 代码中固有的回调 hell 。 Boost.Asio supports coroutines .

关于c++ - io_context 究竟是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60997939/

相关文章:

c++ - QDialog不在循环中绘画

c++ - 我正在尝试制作一个循环来检查输入是否为数字,如果不是则再次询问

c++ - boost spirit 莱克斯和气。集成跳过解析器

C++ Boost::Asio 我得到了 remote.Endpoint().address,现在如何解析主机名?

c++ - 在 boost asio tcp 套接字上接受多个连接

c++ - boost asio 打开更多的一个套接字

c++ - 未声明的 Windows 中的 getchar_unlocked

c++ - Trie 实现运行时错误

c++ - QVariant vs boost::any vs boost::variant

c++ - 如何将 boost::uintmax_t 转换为 std::string