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

时间:2017-02-05 11:54:59

标签: c++ io nonblocking

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

1 个答案:

答案 0 :(得分:0)

I / O--在任何计算意义上 - 需要时间。使用此时间取决于I / O操作是否为“阻塞”。或"非阻塞"。

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

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

对于网络套接字:

  • 非阻塞读取操作将是"即时"并且您需要轮询套接字以获取有关它是否已完成读取的信息,如果是,则需要读取已读取的数据的大小。
  • 在等待之前,阻止读取操作将一直等到读取数据。

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

对于多线程,它是一个恶毒的野兽。根据经验,它不应该在你的C ++术语词汇中,除非你绝对需要它。