You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何统计迭代次数的定时循环每次试验返回的矩阵结果不完全一致?

为什么这段定时循环计数的代码每次运行结果不一致

你写的这段忙等计数代码如下:

from datetime import datetime, timedelta
import numpy as np

ntrials = int(input("number of trials? "))
nobs = int(input("number of observations? "))
for t in range(1,ntrials+1):
    print("\ntrial:",t,"\n")
    data = []
    for n in range(nobs):
        obs = []
        for duration in np.array([0.1,0.2,0.3,0.4,0.5]):
            count = 0
            end_time = datetime.now() + timedelta(seconds=duration)
            while datetime.now() < end_time:
                count += 1
            obs.append(count)
        data.append(obs)
    print(np.array(data))

结果无法保持完全一致是必然的,核心影响因素如下:

  • 操作系统调度不是实时独占的:普通桌面/服务器操作系统都采用抢占式调度,你的Python进程运行时会随时被系统打断,把CPU资源分配给系统后台服务、其他运行中的软件,每次被抢占的时机、被挂起的时长完全不固定,相同墙钟时间内你的循环实际能拿到的CPU执行时间每次都有差异,计数自然不会一样。
  • 时间调用本身存在误差和开销波动:datetime.now()是需要陷入内核的系统调用,本身执行耗时不是固定值,会随系统当前负载波动;同时通用操作系统的系统时钟本身存在精度限制,Windows默认时钟粒度约10-15ms,Linux也有1ms级别的误差,循环终止的判断时间点每次都会有偏移。
  • 运行环境的动态波动:Python解释器执行字节码的效率、内存分配的开销会受解释器当前状态、系统内存占用影响;现代CPU还会根据温度、负载动态调整运行频率,节能降频、睿频都会直接改变单位时间内能执行的指令总数,进一步放大计数结果的差异。

这种忙等计数统计到的本质是系统瞬时的性能状态,本身就不是固定值。哪怕同一次运行过程中,连续两次统计相同时长的计数,结果也大概率存在差异。如果要获得相对稳定的基准测试结果,需要提前关闭系统后台程序、禁用CPU动态调频、给测试进程设置最高调度优先级,但即便如此也无法做到跨次运行结果100%完全一致。

内容的提问来源于stack exchange,提问作者D. Yeo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:18:21