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

曾几何时,我碰到了Indy的文章介绍,从那以后就不能停止思考封锁与非封锁的IO。

寻找一些很好的文章来描述阻塞IO和非阻塞IO的优点和缺点,以及如何在每种情况下devise你的应用程序以获得自然,容易理解和易于维护的代码。
想了解BIG图片…

那么阻塞IO意味着一个给定的线程不能做任何事情,直到IO被完全接收(在套接字的情况下,这个等待可能会很长时间)。

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

为了阻塞IO,你需要接受你要等待每个IO请求,否则你将需要为每个请求释放一个线程(这会非常快速地变得非常复杂)。

对于非阻塞的IO,你可以发送多个请求,但是你需要记住,只有在某个“稍后”的时候才能使用这些数据。 这个检查数据实际到达可能是最复杂的部分。

在99%的应用程序中,您不需要关心IO块。 但是有时候需要额外的性能来允许自己发起一个IO请求,然后在返回之前做一些其他的事情,希望能够发现IO请求已经完成了。

无论如何,只是我的调皮。

积极和消极是非常明确的切割:

阻塞 – 线性编程,更容易编码,更less的控制。
非阻塞 – 并行编程,更难编码,更多控制。

我还没有find好的文章。

我在这里问过关于如何布置asynchronousIO代码的build议: asynchronousIO的整齐代码

答案其实不是很温暖。

asynchronousIO是一个让你头脑发热和debugging的野兽,特别是如果你使用边缘触发器(例如Linux的EPOLLET标志)。 但是,您在代码复杂性方面所付出的代价就是性能和可伸缩性。