3

标准 Ruby 库“io/wait”为 IO 对象提供了一个方法,ready?如果有可用输入则返回非 nil,否则返回 nil 或 false。我知道一些方法,例如sysreadandsyswrite与更高级别的方法一起使用并不安全,例如getsand read,并且想知道ready?与更高级别的方法混合使用是否安全。ready 方法看起来相当有用,也许比依赖 更优雅IO.select,但是,令人惊讶的是,我还没有看到它用得太多。文档中没有任何内容表明与reador一起使用是不安全的gets,我只是想确保我没有混合不兼容的方法,这些方法最终可能在读/写套接字时导致意外行为。

编辑:我想我应该提到我使用的是 Ruby 1.8.7。

4

1 回答 1

3

我对 Ruby 没有太多经验,但我对 libc 有很多经验,我认为是的,它是安全的。用 select() 或 poll() 来实现“就绪”的可能性非常好......

如果“就绪”的行为就像一个 select(),它已经通过了一个时间值为零的 tv_sec 和 tv_usec,那么“就绪”的缺点是你会旋转......你可以通过一个超时来准备吗?

于 2009-11-22T17:41:19.737 回答