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

Events 阻塞IO与非阻塞IO;寻找好文章,events,blocking,nonblocking,io,Events,Blocking,Nonblocking,Io,曾几何时,我偶然发现了这篇文章,从那时起我就一直在思考阻塞IO和非阻塞IO 寻找一些好文章,介绍阻塞IO和非阻塞IO的优缺点,以及如何在每种情况下设计应用程序,以获得自然、易于理解和易于维护的代码。 想了解全局…正面和负面都非常明确: 分块-线性规划,更容易编码,控制更少。 非阻塞-并行编程,更难编码,更易控制。良好的阻塞IO意味着给定线程在完全接收IO之前无法执行更多操作(对于套接字,此等待可能需要很长时间) 非阻塞IO意味着IO请求直接排队,函数返回。实际IO随后由内核在稍后的某个点进行处理

曾几何时,我偶然发现了这篇文章,从那时起我就一直在思考阻塞IO和非阻塞IO

寻找一些好文章,介绍阻塞IO和非阻塞IO的优缺点,以及如何在每种情况下设计应用程序,以获得自然、易于理解和易于维护的代码。

想了解全局…

正面和负面都非常明确:

分块-线性规划,更容易编码,控制更少。

非阻塞-并行编程,更难编码,更易控制。

良好的阻塞IO意味着给定线程在完全接收IO之前无法执行更多操作(对于套接字,此等待可能需要很长时间)

非阻塞IO意味着IO请求直接排队,函数返回。实际IO随后由内核在稍后的某个点进行处理

对于阻塞IO,您要么需要接受等待每个IO请求,要么需要为每个请求触发一个线程(这将很快变得非常复杂)

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

在99%的应用程序中,您无需担心IO阻塞。然而,有时您需要额外的性能,允许自己启动一个IO请求,然后在返回之前执行其他操作,希望能够发现IO请求已经完成

不管怎样,只要我的一便士


编辑:回答如何设计一个应用程序来处理阻塞IO,同时具有良好的性能,这可能是一个很好的选择。

表单应用程序几乎100%关心IO阻塞的情况。用户不喜欢挂起的GUI。没有任何东西可以阻止您运行一个单独的线程,该线程以串行方式执行所有IO并阻塞。。。