1. 背景
近日做程序优化任务,代码不长,时间测试起来需要在for循环里加,破坏了程序执行的流水线,导致时间不准。网上查看了些相关资料,学到了一些东西,虽然对本任务没用,但对于程序/进程执行时间可加深理解。
首先,需要明白的是:
我们平时常用的测量运行时间的方法并不是那么精确的,换句话说,想精确获取程序运行时间并不是那么容易的。也许你会想,程序不就是一条条指令么,每一条指令序列都有固定执行时间,为什么不好算?真实情况下,我们的计算机并不是只运行一个程序的,进程切换,各种中断,共享的多用户,网络流量,高速缓存的访问,转移预测等,都会对计时产生影响。
这个是比较好理解的,通常实际中跑程序跑几次,每次的时间是略有差异的。那么程序的运行时间究竟是怎样的呢?
2. 执行时间
2.1 构成
程序运行时是以进程的形式,因此讨论是在进程层面。
真实时间:进程从开始执行到最后结束的时间,包括阻塞 + 就绪 + 运行的时间。称为 wall clock time/墙上时钟时间/elpapsed time,是我们跑程序实际等待的时间;
系统cpu时间:用户进程获得CPU资源后,在内核态的执行时间,如write,read等系统调用;
用户cpu时间:用户进程获得CPU资源后,在用户态执行的时间,主要