阻塞 IO 与非阻塞 IO [已关闭]

问题描述 投票:0回答:2

有一次,我偶然看到了 Indy 简介 文章,从那时起我就一直在思考阻塞 IO 与非阻塞 IO。

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

events blocking nonblocking io
2个回答
78
投票

阻塞 IO 意味着给定线程在完全接收 IO 之前无法执行任何操作(在套接字的情况下,等待时间可能很长)。

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

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

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

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

无论如何,只是我的两便士。

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


39
投票

优点和缺点非常明确:

阻塞 - 线性编程,更容易编码,更少控制。
非阻塞 - 并行编程,更难编码,更多控制。

© www.soinside.com 2019 - 2024. All rights reserved.