gpt4 book ai didi

c - O_NONBLOCK 意外行为

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:08 24 4
gpt4 key购买 nike

我正在使用套接字并使用 fcntl 设置 O_NONBLOCK,但应用程序仍然占用 100% 的 CPU。即使我正在使用等待时间为 1 毫秒的选择。

出于阅读目的,我正在使用 recv。

我在没有 O_NONBLOCK 的情况下尝试过,在这种情况下,它不会消耗 100% 的 CPU,但 recv 会花费很多时间。我尝试使用 O_NONBLOCK 选项进行 recv,但 recv 仍然需要很多(有时 200 毫秒)的时间来阅读。我们正在使用 select 那么为什么 recv 会花费很多时间?

我不能使用第一个选项(带 O_NONBLOCK 的套接字),因为 CPU 被消耗并且在第二个选项中有时间延迟。

任何人都可以提出意见。它是一个客户端应用程序。

最佳答案

select() 经过优化,可在您使用较长超时时进入高效等待状态(不会消耗太多 CPU)。尝试使用 30 秒之类的东西。当监视的文件描述符之一发生事件时,它将立即返回,因此您可以完成您的工作。

尝试在 strace -v -ttt 或 tcpdump 下查看您的进程以寻找高延迟的提示,或显示相关代码。

另请注意,select 可以更改时间结构,因此请记住在 select() 调用之间重置值。

关于c - O_NONBLOCK 意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7884422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com