短暂睡眠在什么时候增加CPU工具而不是减少它

时间:2014-11-27 04:27:43

标签: java c multithreading architecture cpu-usage

我在一个程序的设计阶段,它将拥有10-30个线程,每个线程将处理许多小块信息。

我可以选择每个模块睡眠5毫秒或根本不睡觉。我应该选择减少CPU上的负载。

通常我会睡觉以降低CPU利用率,但我担心由于上下文切换,许多5 ms的睡眠可能导致CPU利用率增加而不是减少。

是否有关于短暂睡眠与CPU利用率上下文切换之间权衡的研究?

2 个答案:

答案 0 :(得分:2)

睡觉是最后的选择。相反,请查看并发API中的工具,尤其是Queue,它允许您将任务置于睡眠状态,直到消息到达应该执行的任务为止。

或者查看Akka,它允许您轻松构建一个系统,其中一些线程处理数千条消息。这里的主要缺点是你必须围绕Akka设计你的系统 - 它真的不是你可以轻易改装的东西。

如果速度是您主要考虑的问题,请查看阻止免费算法,例如此类" Single Producer/Consumer lock free Queue step by step"或LMAX Disruptor

相关:

答案 1 :(得分:0)

我测试了它。有趣的是,我开始看到3毫秒睡眠时的好处,在此之后每增加几毫秒就会急剧增加。

测试是在Intel Core i3-4130上运行30个线程完成的。每个线程创建一个包含1000个字符串的数组列表,每个字符串是使用commons lang随机生成的,长度为1000个字符。

然后线程在洗牌和排序列表之间交替。

免责声明:这是一个桌面CPU上的一小组测试 - 而不是一项研究。