gpt4 book ai didi

c++ - 在不占用 CPU 时间的情况下在非阻塞应用程序中旋转

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:36 30 4
gpt4 key购买 nike

我有一个 UDP 网络应用程序,它读取发送给它的数据包然后处理它们(同一个线程)。读取是非阻塞的,所以我没有使用轮询或选择。

收到的数据包按 session 分组。

工作取决于是否有正在进行的 session 。如果没有工作要做,即没有 session ,或者没有要处理的数据包,那么我需要旋转。

我一直在研究这里的混合算法: http://www.1024cores.net/home/lock-free-algorithms/tricks/spinning

一直在玩。有人告诉我,它更适合繁忙的等待。您使用什么方法来防止不必要的处理和不必要的高 CPU 使用率?

编辑:

感谢所有的回答和评论。我现在正在做以下事情。当涉及到从网络读取时,我会查看是否还有其他工作要做。如果有,那么我会调用超时为零的轮询。然后我尽可能多地读取数据包并将它们放入内存队列中进行处理。如果没有其他工作,那么我将无限期投票(即 -1)。它似乎运行良好,CPU 只有在事情繁忙时才会高,否则就会降为零。

最佳答案

如果您无事可做,您应该阻塞 - 如果不是在套接字本身上(即,如果它是一个处理多个网络套接字或事件类型的事件循环),那么在一个发生某些事情时发出信号的门(设计取决于您的操作系统如何执行异步 I/O)。

只有在等待非常很短的时间(通常只在内核模式下)时,才应该进行自旋。

关于c++ - 在不占用 CPU 时间的情况下在非阻塞应用程序中旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5644861/

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