有一次我碰到了Introduction to Indy这篇文章,从那时起就一直在思考阻塞 IO 与非阻塞 IO。
寻找一些好的文章来描述阻塞 IO 和非阻塞 IO 的优缺点以及如何在每种情况下设计应用程序以获得自然、易于理解和易于维护的代码.
想要了解大局...
最佳答案
良好的阻塞 IO 意味着给定线程在完全接收到 IO 之前无法执行任何操作(在套接字的情况下,等待时间可能很长)。
非阻塞 IO 意味着 IO 请求立即排队并且函数返回。实际的 IO 随后由内核在稍后的某个时刻进行处理。
对于阻塞 IO,您要么需要接受将等待每个 IO 请求,要么需要为每个请求触发一个线程(这很快就会变得非常复杂)。
对于非阻塞 IO,您可以发送多个请求,但您需要记住,直到某个“稍后”的时刻数据才可用。检查数据是否确实到达可能是最复杂的部分。
在 99% 的应用程序中,您不需要关心 IO 阻塞。然而,有时您需要额外的性能,允许自己发起 IO 请求,然后在返回之前执行其他操作,并希望发现 IO 请求已完成。
无论如何,只是我的两便士。
编辑:回答如何设计一个应用程序来处理阻塞 IO,同时具有良好的性能,coroutines可能是一个不错的选择。
关于events - 阻塞 IO 与非阻塞 IO;寻找好文章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1241429/