常规文件读取是否可以从非阻塞IO中受益?

时间:2011-04-10 17:07:01

标签: io nonblocking

似乎不是我,我找到了link that supports my opinion。你觉得怎么样?

3 个答案:

答案 0 :(得分:7)

您发布的链接内容是正确的。在非阻塞模式下打开的常规文件套接字将始终“准备好”进行读取;当你真正尝试阅读它时,阻塞(或更准确地说,你的来源指出,休眠)将发生,直到操作成功。

无论如何,我认为您的来源需要一些镇静剂。一个愤怒的人,就是这样。

答案 1 :(得分:4)

过去几个小时我一直在深入研究这个问题,并且可以证明你引用的链接的作者是正确的。但是,对于v2.6 +的本机Linux内核中的non-blocking IO against regular files似乎是“更好”(使用该术语非常松散)。 “libaio”软件包包含一个公开内核提供的功能的库,但它有一些关于支持的不同类型文件系统的注意事项,并且它不能移植到Linux 2.6 +以外的任何文件系统。

这是关于这个主题的another good article

答案 2 :(得分:1)

您是正确的,非阻塞模式对常规文件没有任何好处,并且不允许。如果有一个可以设置的辅助标志以及O_NONBLOCK来改变它,那将是很好的,但由于缓存和虚拟内存的工作方式,定义正确的“非”实际上并不是一件容易的事。阻止普通文件的行为意味着。除非您允许程序锁定与文件关联的内存,否则肯定存在竞争条件。 (实际上,为普通文件实现一种非睡眠IO的一种方法是mmap文件和mlock地图。之后,在任何合理的实施中,read只要文件偏移量和缓冲区大小保持在映射区域的范围内,write就永远不会睡眠。)