曾几何时我碰到了Introduction to Indy文章,从那时起就不能再考虑阻止与非阻塞IO了。
寻找一些好的文章,描述阻止IO和非阻塞IO的优缺点以及如何设计应用程序以获得自然,易于理解和易于维护的代码。
想了解大图...
答案 0 :(得分:60)
阻塞IO意味着在完全接收IO之前,给定的线程不能再执行任何操作(在套接字的情况下,这种等待可能需要很长时间)。
非阻塞IO意味着IO请求立即排队,函数返回。然后,内核稍后会处理实际的IO。
对于阻止IO,您需要接受您将等待每个IO请求,或者您将需要为每个请求启动一个线程(这将非常快速地变得非常复杂)。
对于非阻塞IO,您可以发送多个请求,但您需要记住,在某些“稍后”点之前,数据将无法使用。检查数据实际到达的可能是最复杂的部分。
在99%的应用程序中,您无需关心IO阻止。但有时您需要额外的性能,允许自己启动IO请求,然后在返回之前执行其他操作,并希望找到IO请求已完成。
无论如何,只是我的tuppence。
答案 1 :(得分:21)
积极因素和消极因素非常明确:
阻塞 - 线性编程,更容易编码,控制更少。
非阻塞 - 并行编程,更难编码,更多控制。