【发布时间】:2011-10-25 03:38:44
【问题描述】:
我正在使用套接字并使用 fcntl 设置 O_NONBLOCK,但仍然通过消耗 100% CPU 的应用程序。即使我正在使用等待时间为 1 毫秒的选择。
出于阅读目的,我使用recv。
我在没有 O_NONBLOCK 的情况下尝试了它,在这种情况下它不会消耗 100% 的 CPU,但 recv 需要很多时间。我尝试使用 O_NONBLOCK 选项进行 recv,但仍需要花费大量(有时 200 毫秒)时间来读取 recv。 我们正在使用 select 那为什么 recv 需要很多时间?
我不能使用第一个选项(带有 O_NONBLOCK 的套接字),因为 CPU 已被消耗,而在第二个选项中存在时间延迟。
任何人都可以提出意见。它是一个客户端应用程序。
【问题讨论】:
-
"为了读取目的,使用 recv 并且一旦不设置 O_NONBLOCK 则它不会消耗 100% CPU,如果在这种情况下,使用 O_NONBLOCK 选项的 recv 会花费很多时间来读取值。"
标签: c linux sockets unix networking