C++中的阻塞和非阻塞I/O的定义和实现

Blocking and Non-blocking I/Os in C++ definition and implementation

本文关键字:定义 实现 C++      更新时间:2023-10-16

最近,由于我正在处理的一个c++项目,我在c++中遇到了非阻塞I/O的概念。如果有人需要一个跨平台的解决方案,那么在不使用boost.asio、libuv和任何相关的外部库的情况下,可以实现非阻塞模式吗?一个例子将非常有助于区分阻塞和非阻塞I/O之间的区别。

I/O——在任何计算意义上——都需要时间。使用该时间的位置取决于I/O操作是"阻塞"还是"非阻塞"。

非阻塞I/O发生在调用线程之外。这通常意味着"繁忙等待"来自I/O的信号,告诉您有数据。

阻塞I/O操作将停止调用线程的执行,直到操作完成。

对于网络套接字:

  • 非阻塞读取操作将是"即时"的,您需要轮询套接字以获取有关它是否已完成读取的信息,如果已完成读取,则需要查看已读取数据的大小
  • 阻止读取操作将等待数据被读取后再取消等待

对于文件:
类似于网络套接字的情况,只有您从硬件设备读取,因此可能会更快。

至于多线程,这是一个很难处理的问题。根据经验,除非你绝对需要,否则它不应该出现在你的C++术语表中