首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻塞和非阻塞I/O

阻塞和非阻塞I/O
EN

Stack Overflow用户
提问于 2015-12-01 10:04:18
回答 2查看 1.1K关注 1票数 0

在类unix系统中,阻塞i/o和非阻塞i/o有什么区别?有没有人用实时场景来解释这些概念。我已经看过网上和书籍上的参考资料了。但是,我仍然无法理解非阻塞i/o的使用。是否有人总结了你对此所知道的,而没有具体说明任何理论概念。

EN

回答 2

Stack Overflow用户

发布于 2015-12-01 10:10:26

通常情况下,一个过程可以完成一个以上的任务。其中一些任务可能取决于外部数据。

现在,假设其中一个任务必须侦听某个可能发出请求的客户端,并处理该请求。为此,进程必须打开套接字并侦听请求。使用阻塞套接字,进程将挂起,直到请求实际出现。这意味着进程必须处理的所有其他任务在请求传入之前都无法处理!但是,对于非阻塞套接字,如果没有请求挂起,则套接字命令将立即返回。因此,该流程可以处理其他任务,并返回并定期检查客户端请求。

同样的情况也适用于作为输入被读取的文件,尽管没有那么频繁:如果一个文件被读取,而另一个进程仍在写入它,那么阻塞读取访问将挂起。非阻塞访问再次允许在同一时间内完成其他工作,然后返回到稍后或在常规基础上读取文件。例如,对于日志文件处理非常重要。所以那些总是在每个定义后面附加东西的文件。

还有其他办法来处理这一问题。但是,文件/套接字操作中的阻塞和非阻塞模式是保持低复杂度的一种实用方法。

票数 1
EN

Stack Overflow用户

发布于 2015-12-01 11:16:07

大概吧。

当你买一个新的房子要建造,你使用一个非阻塞行为,你买它和不等待(非阻塞)到位,直到建设结束。你只是继续过你的生活,有时,构造函数会打电话给你,告诉你你的新房子已经准备好了(signal中断--被动等待),或者你定期打电话给他,以获取一些关于施工过程的信息(poll - active wait)。

当你去餐馆的时候,你使用阻塞行为,你发出命令,然后等待()直到服务。

通常,当您需要一些东西,因为您不能没有所需的东西时,您可以使用阻塞场景。当您需要一些东西,但如果您需要的东西现在不可用时,您可以做一些其他的事情,您可以使用non-blocking场景。

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

https://stackoverflow.com/questions/34017596

复制
相关文章

相似问题

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