在类unix系统中,阻塞i/o和非阻塞i/o有什么区别?有没有人用实时场景来解释这些概念。我已经看过网上和书籍上的参考资料了。但是,我仍然无法理解非阻塞i/o的使用。是否有人总结了你对此所知道的,而没有具体说明任何理论概念。
发布于 2015-12-01 02:10:26
通常情况下,一个过程可以完成一个以上的任务。其中一些任务可能取决于外部数据。
现在,假设其中一个任务必须侦听某个可能发出请求的客户端,并处理该请求。为此,进程必须打开套接字并侦听请求。使用阻塞套接字,进程将挂起,直到请求实际出现。这意味着进程必须处理的所有其他任务在请求传入之前都无法处理!但是,对于非阻塞套接字,如果没有请求挂起,则套接字命令将立即返回。因此,该流程可以处理其他任务,并返回并定期检查客户端请求。
同样的情况也适用于作为输入被读取的文件,尽管没有那么频繁:如果一个文件被读取,而另一个进程仍在写入它,那么阻塞读取访问将挂起。非阻塞访问再次允许在同一时间内完成其他工作,然后返回到稍后或在常规基础上读取文件。例如,对于日志文件处理非常重要。所以那些总是在每个定义后面附加东西的文件。
还有其他办法来处理这一问题。但是,文件/套接字操作中的阻塞和非阻塞模式是保持低复杂度的一种实用方法。
发布于 2015-12-01 03:16:07
大概吧。
当你买一个新的房子要建造,你使用一个非阻塞行为,你买它和不等待(非阻塞)到位,直到建设结束。你只是继续过你的生活,有时,构造函数会打电话给你,告诉你你的新房子已经准备好了(signal,中断--被动等待),或者你定期打电话给他,以获取一些关于施工过程的信息(poll - active wait)。
当你去餐馆的时候,你使用阻塞行为,你发出命令,然后等待(块)直到服务。
通常,当您需要一些东西,因为您不能没有所需的东西时,您可以使用阻塞场景。当您需要一些东西,但如果您需要的东西现在不可用时,您可以做一些其他的事情,您可以使用non-blocking场景。
https://stackoverflow.com/questions/34017596
复制相似问题