【问题标题】:Why does a select() call have a timeout? What are reasonable values for it in common scenarios?为什么 select() 调用有超时?在常见情况下它的合理值是多少?
【发布时间】:2017-03-18 13:34:57
【问题描述】:

我想知道 POSIX select() 调用中的超时值。我理解为什么人们可能想要 0 值(用于轮询文件描述符)。还有哪些常用的值,以及用于什么目的?

【问题讨论】:

  • 可能需要一些内务处理,例如关闭不活动的连接/文件描述符,或向连接的对等方安排保持活动消息,或将摘要行写入日志文件,或将程序状态保存在状态文件中.

标签: c sockets posix poll-syscall


【解决方案1】:

请注意,对于多路复用目的,poll(2) 通常优于 select(2)(因为 FD_SETSIZE 是对最高文件描述符的严格限制)。

您将使用的实际超时取决于具体情况。在许多 GUI widget toolkit 框架中,您知道屏幕以 50 或 60Hz 的频率刷新,因此您可能会相应地设置超时(例如,设置为 20 毫秒)。或者你知道鼠标应该每秒至少跟随 10 次,等等。实际上,这些工具包也有超时,所以 poll 或 select 超时是在 event loop 的每个周期动态计算的。在 Web 服务器中,超时是可配置的,程序会相应地计算 poll 超时。

在实践中,poll(2) 或 select(2) 通常高于一毫秒,并且可能低于几十秒。 YMMV。顺便说一句,确切的超时时间通常不是很重要。

另请参阅Answers section of Norvig's Teach Yourself Programming in Ten Years 网页(非常有趣的读物)。

【讨论】:

  • 我认为令人困惑的是,您希望鼠标移动会将数据放在您选择的文件描述符之一上,因此可以安全地使用 select 而不会超时。真正的问题是,在真正的程序设计中,除了再次调用 select 之外,有人可能期望在超时后做什么。
  • 但这取决于情况和应用程序。
猜你喜欢
  • 2011-05-30
  • 2016-10-23
  • 2016-11-12
  • 2013-12-23
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 2012-06-08
相关资源
最近更新 更多