阻止IO与非阻塞IO; 寻找好文章

Pio*_*ost 47 io events nonblocking blocking

曾几何时我碰到了Indy的介绍文章,从那时起就不能停止考虑阻塞与非阻塞IO.

寻找一些好文章,描述阻止IO和非阻塞IO的优缺点,以及如何在每种情况下设计应用程序,以获得自然,易于理解和易于维护的代码.
想了解大图...

Goz*_*Goz 62

阻塞IO意味着给定的线程在完全接收到IO之前不能再执行任何操作(在套接字的情况下,这种等待可能需要很长时间).

非阻塞IO意味着IO请求立即排队,函数返回.然后,内核稍后会处理实际的IO.

对于阻止IO,您需要接受您将等待每个IO请求,或者您将需要为每个请求启动一个线程(这将非常快速地变得非常复杂).

对于非阻塞IO,您可以发送多个请求,但您需要记住,在某些"稍后"点之前,数据将无法使用.检查数据实际到达的可能是最复杂的部分.

在99%的应用程序中,您无需关心IO阻塞.但有时您需要额外的性能,允许自己发起IO请求,然后在返回之前执行其他操作,并希望找到IO请求已完成.

无论如何,只是我的tuppence.

  • 没有什么能阻止你运行一个单独的线程来连续执行所有IO并阻塞... (7认同)

Spe*_*ort 23

积极因素和消极因素非常明确:

阻塞 - 线性编程,更容易编码,控制更少.
非阻塞 - 并行编程,更难编码,更多控制.