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

时间:2009-08-06 21:02:03

标签: events blocking nonblocking io

曾几何时我碰到了Introduction to Indy文章,从那时起就不能再考虑阻止与非阻塞IO了。

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

2 个答案:

答案 0 :(得分:60)

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

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

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

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

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

无论如何,只是我的tuppence。

答案 1 :(得分:21)

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

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