命令使用
time命令用于计算程序运行的耗时,使用方法就是在命令前加上time即可。
time tar -zxvf xxx.tar.gz
要注意的是time命令不会屏蔽后面真实命令的输出,他会在命令输出结束后加上命令的时间信息,如下图:
time命令
详细释义
-
real
real表示从执行命令开始,到命令执行结束,时钟一共走过了多少时间,相当于进程开始时记录一下时间,结束后再记录一下时间,然后计算时间差,我们一般主要就看这个时间,因为这是程序客观上的执行时间。
-
user
user表示进程在用户态的cpu时间,这里解释一下用户态与内核态:
内核态(Kernel Mode)
在内核态,代码拥有完全的,不受任何限制的访问底层硬件的能力。可以执行任意的CPU指令,访问任意的内存地址。内核态通常情况下,都是为那些最底层的,由操作系统提供的,可信可靠的代码来运行的。内核态的代码崩溃将是灾难性的,它会影响到整个系统。
用户态(User Mode)
在用户态,代码不具备直接访问硬件或者访问内存的能力,而必须借助操作系统提供的可靠的,底层的API来访问硬件或者内存。由于这种隔离带来的保护作用,用户态的代码崩溃,系统是可以恢复的。我们大多数的代码都是运行在用户态的。
而cpu时间是cpu的工作时间。
-
sys
表示cpu在内核态的工作时间。
注意
real 不等于 user + sys
上面的图可以看出real时间为0.004,而user和sys相加等于0.005,实际上real与后面两个值是不可以对比的,他们代表的东西完全不同,cpu在内核态与用户态的工作时间不代表客观的时钟时间。
尤其是在多核心执行的情况下,比如四个CPU核心同时执行一个程序,每个CPU耗时1秒,四个共计耗时4秒,但客观的时钟时间只有1秒,因为四个CPU是同时运行的。