java - 在什么时候短 sleep 会增加而不是减少 CPU 利用率

标签 java c multithreading architecture cpu-usage

我正处于一个将有 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/

相关文章:

java - 使用 BufferedReader 读取 csv 文件的最后 n 行

c# - 使用线程时是否需要锁定 "read only"服务?

ruby-on-rails - Ruby/Rails 线程安全

Java 编码标准 - 所有变量名均小写

java - 正则表达式编号

c - 需要一些关于 C header 包含的建议

c - 使用 ioctl 将多个 ipv6 地址添加到单个接口(interface)

ios - dispatch_queue_t 定义为强

java - 如何在 Eclipse 中找到哪个方法调用了当前选定的方法?

使用递归函数确定数字是否为素数的 C 程序