阻止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标志)。 但是,您在代码复杂性方面所付出的代价就是性能和可伸缩性。