我正处于一个将有 10-30 个线程的程序的设计阶段,其中每个线程将处理许多小块信息。
我可以选择每个 block hibernate 5 毫秒或根本不 hibernate 。我应该选择减少 CPU 负载的那个。
通常我会 sleep 以降低 CPU 利用率,但我担心许多 5 毫秒的 sleep 可能会由于上下文切换而导致 CPU 利用率增加而不是减少。
是否已经进行了关于在 CPU 利用率上短暂 sleep 和上下文切换之间权衡的研究?
最佳答案
sleep 是最后的选择。相反,请查看并发 API 中的工具,尤其是 Queue
,它允许您将任务置于 hibernate 状态,直到它应该执行的消息到达为止。
或者看Akka这使您可以轻松构建一个系统,其中几个线程可以处理数千条消息。这里的主要缺点是你必须围绕 Akka 设计你的系统——它真的不是你可以轻易改造的东西。
如果速度是您的主要关注点,请查看无阻塞算法,例如“Single Producer/Consumer lock free Queue step by step”或LMAX Disruptor .
相关:
关于java - 在什么时候短 sleep 会增加而不是减少 CPU 利用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27163066/