我在一个程序的设计阶段,它将拥有10-30个线程,每个线程将处理许多小块信息。
我可以选择每个模块睡眠5毫秒或根本不睡觉。我应该选择减少CPU上的负载。
通常我会睡觉以降低CPU利用率,但我担心由于上下文切换,许多5 ms的睡眠可能导致CPU利用率增加而不是减少。
是否有关于短暂睡眠与CPU利用率上下文切换之间权衡的研究?
答案 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上的一小组测试 - 而不是一项研究。