Linux中time命令,经常用来计算某个程序的运行耗时,用户态CPU耗时,系统态CPU耗时。
例如:
$ time test
real 4m26.226s
user 6m15.008s
sys 1m2.479s
- real:表示test整个程序的运行耗时。
- user:表示test程序运行在用户态的cpu时间。
sys:表示test程序运行在核心态的cpu时间。
- 核心态:在内核态,代码拥有完全的,不受任何限制的访问底层硬件的能力。可以执行任意的CPU指令,访问任意的内存地址。内核态通常情况下,都是为那些最底层的,有操作系统提供的,可信可靠的代码来运行的。内核态的代码崩溃将是灾难性的,会影响到整个系统。
- 用户态:在用户态,代码不具备直接访问硬件或者访问内存的能力,而必须借助操作系统提供的可靠的,底层的APIs来访问硬件或者内存。由于这种隔离性带来的保护作用,用户态的代码崩溃,系统是可以恢复的。我们大多数的代码都是运行在用户态的。
CPU总时间(user+sys)是CPU执行用户进程操作和内核系统调用所耗时间的综合,即该进程(包括其线程和子进程)锁使用的实际CPU时间。若程序循环遍历数组,则增加用户CPU时间;
- Real < CPU,表明进程为计算密集型(CPU bound),利用多核处理器的并行执行优势;
- Real ≈ CPU,表明进程为计算密集型(CPU
bound),未并行执行; - Real > CPU,表明进程为I/O密集型(I/O bound),多核并行执行优势并不明显。