阻塞和非阻塞I / O.

时间:2015-12-01 10:04:18

标签: linux unix io

在像unix这样的系统中阻塞i / o和非阻塞i / o有什么区别。是否有人实时解释这些概念 场景。我已经浏览了在线和书籍中的参考资料。但是,我仍然无法理解非使用 阻止i / o。有没有人总结你对此有何了解,而不是指明在某个地方有任何理论概念。

2 个答案:

答案 0 :(得分:1)

通常,一个进程可以执行多个单个任务。其中一些任务可能取决于外部数据。

现在想象其中一个任务必须听一些可能发出请求并处理该请求的客户端。为此,进程必须打开套接字并侦听请求。使用阻塞套接字,进程现在将挂起,直到请求实际进入。这意味着在请求进入之前,进程必须处理的所有其他任务都无法处理!但是,如果没有挂起请求,则socket命令会立即返回。因此,进程可以处理其他任务,然后返回并在常规基础上检查客户端请求。

这同样适用于作为输入读取的文件,但不是那么频繁:如果在另一个进程仍然写入文件的同时读取文件,则阻塞读取访问将挂起。非阻塞访问再次允许在平均时间内执行其他操作并返回到稍后或常规基础上读取文件。例如,对于日志文件处理非常重要。所以总是按照定义附加内容的文件。

存在其他方法来处理此问题。但是,文件/套接字操作的阻塞和非阻塞模式是保持低复杂性的实用方法。

答案 1 :(得分:1)

大致。

当您购买要建造的新房屋时,您使用非阻塞行为,您购买它并且不等待(非阻止)到位,直到施工结束。你只是继续过你的生活,有时候建设者会打电话给你告诉你你的新房子准备就绪(信号中断 - 被动等待),或者你定期打电话给他,以获得有关施工过程的一些信息(民意调查 - 主动等待)。

当你去餐馆时,你会使用阻止行为,你可以发出命令,然后等待(阻止)直到被送达。

一般情况下,如果您需要某些东西,因为如果没有您需要的东西就无法继续下去,那么您可以使用阻止方案。如果您需要某些内容但是如果您现在无法获得所需的内容,则可以使用非阻止方案。