events - 阻塞 IO 与非阻塞 IO;寻找好文章

标签 events blocking nonblocking io

有一次我碰到了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/

相关文章:

java - 通过LAN网络(java)发送和监听swing事件?

java - 为什么我不能直接访问(并锁定)对象用于同步块(synchronized block)的隐式锁

java - 如何在Java中以非阻塞方式列出目录中的文件?

java - Tomcat : NIOConnector throws exception

javascript - 如何在 IE 中的文档上触发 "onload"事件

Spring 集成 HTTP 到 Scatter Gather

JavaScript 添加事件跨浏览器功能实现 : use attachEvent/addEventListener vs inline events

sql - 插入数据时使用 Rowlock 有帮助......?

c++ - 可以阻止 cin 等待输入吗?

c - C 的基本非阻塞 tcp 连接示例