Linux 为什么多次运行同一程序的程序执行时间不同?

Linux 为什么多次运行同一程序的程序执行时间不同?,linux,time,cpu-usage,long-running-processes,Linux,Time,Cpu Usage,Long Running Processes,考虑一个生成素数的nodejs cpu绑定程序: //generatePrimes.js //长时间运行/CPU限制计算 函数生成器时间(开始、范围){ 常量素数=[] 让isPrime=true 让结束=开始+范围 for(让i=start;i

考虑一个生成素数的nodejs cpu绑定程序:

//generatePrimes.js
//长时间运行/CPU限制计算
函数生成器时间(开始、范围){
常量素数=[]
让isPrime=true
让结束=开始+范围
for(让i=start;i

我的硬件/操作系统配置: 带有Linux Ubuntu 20.04.2 LTS桌面环境的笔记本电脑,具有8个内核:

$inxi-C-M
机器:类型:笔记本电脑系统:HP产品:HP笔记本电脑17-by1xxx v:Type1ProductConfigId序列号:
Mobo:HP型号:8531 v:17.16序列号:UEFI:Insyde v:F.32日期:2018年12月14日
CPU:拓扑:四核型号:英特尔核心i7-8565U位:64类型:MT MCP二级缓存:8192千兆赫最小/最大速度:400/4600兆赫核心速度(MHz):1:700 2:700 3:700 4:700 5:700 6:700 7:700 8:700
$echo“CPU线程:$(grep-c processor/proc/cpuinfo)”
CPU线程:8个

现在,让我们测量经过的时间:

$/usr/bin/time-f“%e”节点generatePrimes.js
[
2,   3,   5,   7,  11,  13,  17,  19,  23,  29,  31,  37,
41,  43,  47,  53,  59,  61,  67,  71,  73,  79,  83,  89,
97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223,
227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281,
283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359,
367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433,
439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
509, 521, 523, 541,
…664479更多项目
]
7.99
好的,如果我运行一次程序,经过的时间是~8秒


但是,考虑BASH脚本<代码> TestGuangEdPrimes .SH <代码>,以测量经过的时间,按顺序或并行运行相同的程序6次:

#/bin/bash
#获取运行次数,作为命令行参数
如果[$#-eq 0]
然后
回声
echo-e“以顺序和并行方式运行n个进程。”
回声
echo-e“用法:”
回声-e“$0”
回声
echo-e“示例:”
回声-e“$0.6”
echo-e“运行6次”
回声
出口1
fi
numRuns=1美元
#运行进程“node generatePrimes”的单个实例
运行进程(){
/usr/bin/time-f“%e”节点generatePrimes.js>/dev/null
}
回声
echo“序列测试:运行generateTime,$numRuns连续序列时间”
回声
对于i,单位为美元(seq$numRuns);做
运行过程
完成
回声
echo“并行测试:并行运行generateTime$numRuns(后台进程)”
回声
对于i,单位为美元(seq$numRuns);做
运行过程&
完成

等待<我无法复制这些结果(除非我从该窗口切换并开始使用浏览器,例如):10.64 10.68 10.42 10.51 10.59 10.46 10.48 10.65 10.49 10.47此运行中的差异很小,可以通过多用户、多任务操作系统轻松解释。。。请注意,我还将数字输出重定向到
/dev/null
,因此另一种可能是终端窗口/滚动缓冲区处理造成了差异。是的,您的值是合理的/预期的。相反,在我的例子中,我开始认为问题不在于软件或操作系统,而可能与硬件有关:我认为CPU BIOS的“节能”设置不允许完全使用内核。这有意义吗?不幸的是,进入BIOS配置后,我无法调整任何相关参数。只是出于好奇:如果您没有将数字输出到屏幕上,计算机上的计时会做什么<代码>/usr/bin/time-f“%e”节点js generatePrimes.js>/dev/null
已尝试。差异很小/难以察觉,例如8.35重定向到/dev/null?!在维护标准输出时为8.30。我觉得stdio没什么大不了的。。。有趣的一点;我也只是在工作时的工作站上进行了测试,结果与家里的测试结果几乎相同<代码>10.9410.9310.9310.9110.9010.9110.9210.9110.9110.9110.92。。。尽管CPU类型完全不同。在家里,我有一个8核
英特尔(R)核(TM)i7-6700CPU@3.40GHz
;工作机器是6核
英特尔(R)至强(R)W-2133 CPU@3.60GHz