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

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

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

I/O - 在任何计算意义上 - 都需要时间。在何处使用此时间取决于 I/O 操作是 "blocking" 还是 "non-blocking"。

Non-blocking I/O 发生在调用线程之外。这通常意味着来自 I/O 的信号的 "busy wait" 告诉您有数据。

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

对于网络套接字:

  • Non-blocking 读取操作将是 "instant",您将需要轮询套接字以获取有关它是否已完成读取的信息,如果是,则读取的数据大小。
  • 阻塞读取操作将等到数据被读取后再取消等待。

对于文件:
与网络套接字类似的情况只有你从硬件设备读取,所以它可能会更快。

至于多线程,它是一头凶猛的野兽。根据经验,它不应该出现在你的 C++ 术语词汇表中,除非你绝对需要它。