【问题标题】:Blocking and Non-Blocking I/O阻塞和非阻塞 I/O
【发布时间】:2015-12-01 10:04:18
【问题描述】:

在类 unix 系统中,阻塞 i/o 和非阻塞 i/o 有什么区别。有没有人实时解释这些概念 设想。我已经浏览了在线和书籍中的参考资料。但是,我仍然无法理解 non- 阻塞 i/o。有没有人总结一下您对此的了解,而不是指定任何地方已经存在的任何理论概念。

【问题讨论】:

标签: linux unix io


【解决方案1】:

通常有一个流程执行不止一项任务。其中一些任务可能依赖于外部数据。

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

这同样适用于作为输入读取的文件,虽然不是那么频繁:如果一个文件被读取而另一个进程仍在写入它,那么阻塞读取访问将挂起。非阻塞访问再次允许同时执行其他操作并稍后或定期返回读取文件。例如,对于日志文件处理非常重要。因此,文件总是会根据定义附加内容。

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

【讨论】:

    【解决方案2】:

    大概。

    当您购买要建造的新房屋时,您使用的是非阻塞行为,您购买它并且不等待(非阻塞)直到建造结束。您只是继续过自己的生活,有时稍后构造函数会打电话告诉您新房子已经准备好(信号中断 - 被动等待),或者您定期打电话给他以获取有关施工过程的一些信息(民意调查 - 积极等待)。

    当你去餐厅时,你使用了一种阻止行为,你发出命令然后等待(block)直到被送达。

    一般来说,当你需要一些东西,因为没有你需要的东西就不能走得更远,你会使用阻塞场景。当您需要某些东西但如果您需要的东西现在不可用时可以做其他事情,您可以使用非阻塞方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-16
      • 2012-06-18
      相关资源
      最近更新 更多