Wall time 和 CPU time
- real time(wall time)是从进行开始执行到完成所经历的墙上时钟时间(wall clock)时间,包括其他进程使用的时间片(time slice)和本进程耗费在阻塞(如等待 I/O 操作完成)上的时间;
- user time 是进程执行用户态代码(内核外)耗费的 CPU 时间,仅统计该进程执行时实际使用的 CPU 时间,而不计入其他进程使用的时间片和本进程阻塞的时间;
- sys time 是该进程在内核态运行所耗费的 CPU 时间,即内核执行系统调用所使用的 CPU 时间;
CPU 总时间(user + sys)是 CPU 执行用户进程操作和内核(代表用户进程执行)系统调用所耗时间的总和,即该进程(包括线程和子进程)所使用的实际 CPU 时间。若程序循环遍历数组,则增加用户 CPU 时间;若程序执行 exec 或 fork 等系统调用,则增加系统 CPU 时间。
在多核处理器机器上,若进程含有多个线程或通过 fork 调用创建子进程,则实际时间可能小于 CPU 总时间,因为不同线程或进程可并行执行,但其时间会计入主进程的 CPU 总时间。若程序在某段时间处于等待状态而并未执行,则实际时间可能大于 CPU 总时间:
- real < CPU 表明进程为计算密集型(CPU bound),利用多核处理器的并行执行优势;
- real ≈ CPU 表明进程为计算密集型,未并行执行;
- real > CPU 表明进程为I/O密集型 (I/O bound),多核并行执行优势并不明显;