似乎不是我,我找到了link that supports my opinion。你觉得怎么样?
答案 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
就永远不会睡眠。)