首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是简单的阻塞IO和非阻塞IO?

什么是简单的阻塞IO和非阻塞IO?
EN

Stack Overflow用户
提问于 2009-09-26 07:59:21
回答 3查看 728关注 0票数 9

你如何解释一个关于阻塞IO和非阻塞IO的简单的凡人?我发现这些概念在我们许多程序员中并不是很清楚。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-26 08:04:34

阻塞I/O意味着当I/O正在进行时,程序的执行被搁置。所以程序会等待,直到I/O完成,然后继续执行。在非阻塞I/O中,程序可以在I/O操作期间继续。

票数 9
EN

Stack Overflow用户

发布于 2009-09-26 08:11:30

这是一个并发问题。在正常情况下,在OS内核从用户程序接收到I/O操作之后,该程序不会再次运行,直到I/O操作完成。其他程序通常会在此期间进行调度。

这解决了很多小问题。例如,除非在read(2)返回时I/O已完成,否则程序如何知道读取了多少字节?当write(2)返回时,如果操作仍在进行中,它如何知道是否可以重用write(2)缓冲区?显然,真正的异步I/O需要更复杂的接口。

最终归结为:

  1. I/O相对于程序同步发生,通过阻塞程序直到I/O完成
  2. I/O仅由系统调用调度,并且存在一些通知机制来传达实际结果
  3. 存在一种折衷方案,即如果I/O操作不能立即完成,则它们将完全失败。这是“非阻塞”I/O在实践中更常见的用法。

此外,当I/O可能只阻塞一个线程时,调度多线程程序的努力使整个问题变得复杂,但这是另一个问题……

票数 4
EN

Stack Overflow用户

发布于 2009-09-26 08:04:51

简单地说..非阻塞i/o (异步)允许其他操作在它做自己的事情时被执行,而阻塞i/o会阻塞其他操作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1480722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档