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