【发布时间】:2014-11-27 04:27:43
【问题描述】:
我正处于一个程序的设计阶段,该程序将有 10-30 个线程,其中每个线程将处理许多小信息块。
我可以选择每个块休眠 5 毫秒或根本不休眠。我应该选择能减少 CPU 负载的那个。
通常我会休眠以降低 CPU 利用率,但我担心由于上下文切换,许多 5 毫秒的休眠可能会导致 CPU 利用率增加而不是减少。
是否已经对短睡眠和上下文切换对 CPU 利用率的权衡进行了研究?
【问题讨论】:
-
这当然取决于你的 CPU,它们的数量,以及你的操作系统,但是这些线程真的除了计算什么都不做吗?例如没有 I/O?如果他们要执行系统调用,我会完全省略睡眠,让他们全速前进。操作系统会应付。您可以考虑降低他们的优先级。
-
EJP,在我所描述的系统部分中将没有 I/O - 这将是纯计算。我会考虑降低他们的优先级。
-
如果一台运行在 1GHz 的计算机每个时钟周期可以运行一次操作,那就是 5ms 内的 500 万次操作。您可以在这段时间内进行很多次上下文切换!
-
请记住,Sleep(1) 可能与 Sleep(10) 等待相同的时间,具体取决于计时器分辨率。
-
假设你有固定的工作要做,休眠意味着你将占用 CPU 的时间更长,并且无法利用系统没有其他工作要做的时间段。这只是一个坏的想法,你应该拒绝它。
标签: java c multithreading architecture cpu-usage