曾几何时,我偶然看到Indy 简介文章,从那时起就无法停止思考阻塞与非阻塞 IO。
寻找一些好的文章来描述阻塞 IO 和非阻塞 IO 的优缺点以及如何在每种情况下设计您的应用程序以获得自然、易于理解和易于维护的代码。
想了解大图...
曾几何时,我偶然看到Indy 简介文章,从那时起就无法停止思考阻塞与非阻塞 IO。
寻找一些好的文章来描述阻塞 IO 和非阻塞 IO 的优缺点以及如何在每种情况下设计您的应用程序以获得自然、易于理解和易于维护的代码。
想了解大图...
阻塞 IO 意味着给定线程在完全接收到 IO 之前不能再做任何事情(在套接字的情况下,这个等待可能会很长时间)。
非阻塞 IO 意味着一个 IO 请求立即排队并且函数返回。实际的 IO 会在稍后由内核处理。
对于阻塞 IO,您要么需要接受要等待每个 IO 请求,要么需要为每个请求触发一个线程(这将很快变得非常复杂)。
对于非阻塞 IO,您可以发送多个请求,但您需要记住,数据直到某个“稍后”点才可用。检查数据是否实际到达可能是最复杂的部分。
在 99% 的应用程序中,您不需要关心您的 IO 阻塞。但是,有时您需要允许自己发起 IO 请求,然后在返回之前执行其他操作并希望发现 IO 请求已完成的额外性能。
无论如何,只是我的遗憾。
编辑:要回答如何设计用于处理阻塞 IO 的应用程序同时具有良好的性能,协程可能是一个很好的选择。
正面和负面非常明确:
阻塞 - 线性编程,更容易编码,更少控制。
非阻塞 - 并行编程,更难编码,更多控制。