我有一个 UDP 网络应用程序,它读取发送给它的数据包,然后处理它们(相同的线程)。读取是非阻塞的,所以我没有使用轮询或选择。
收到的数据包按会话分组。
工作取决于是否有正在进行的会话。如果没有工作要做,即没有会话,或者没有要处理的数据包,那么我需要旋转。
我一直在看这里找到的混合算法: http ://www.1024cores.net/home/lock-free-algorithms/tricks/spinning
一直在玩它。有人告诉我,这更多是为了忙碌的等待。您使用什么方法来防止不必要的处理和不必要的高 CPU 使用率?
编辑:
感谢所有的答案和评论。我现在正在做以下事情。当谈到从网络阅读时,我会看看是否还有其他工作要做。如果有,那么我调用 poll 超时为零。然后我尽可能多地读取数据包并将它们放入内存队列中进行处理。如果没有其他工作,那么我会无限期地投票(即-1)。它似乎运作良好,CPU只有在事情繁忙时才高,否则它会下降到零。