【发布时间】:2009-11-14 16:24:50
【问题描述】:
我想问什么情况下我们需要在文件/套接字描述符上使用非阻塞标志,这意味着我们总是可以使用 select 函数调用来确定就绪描述符。这是对 Unix Network Programming V1 第 16.2 节中的程序的引用。在那个程序中,为什么作者在 3 个描述符 stdin、stdout、socket 上设置非阻塞标志。他还说 EWOULDBLOCK 永远不会发生。但他也说时间从 12.3 秒减少到 6.9 秒。
【问题讨论】:
-
并非我们所有人都有这本书。请描述正在测量哪些程序的运行时间——以及在什么样的系统上。
-
在 Unix 上,他测量文件的传输基本上是一个回显客户端。
-
什么类型的 Unix 和使用了什么硬件?我问这个是因为我怀疑差异可能与程序各自的控制流有关,而不是与系统调用的开销有关。
-
不,它与硬件/软件无关。它是一个一般概念。我只是在问为什么当该描述符未准备好时我会调用 read(我通过 select() 知道),所以如果该描述符已准备好(由 FD_ISSET 返回),我无论如何都不会阻塞。