Linux 中 time 命令,我们经常用来计算某个程序的运行耗时,用户态cpu耗时,系统态cpu耗时。
如用
就可以计算编译程序使用的时间,借一张编译 php8 的图片来说明
🧒👑🖌😡🦷
上图这三个时间都具体代表什么意思呢?
real : 表示 make 程序整个的运行耗时,可以理解为 make 运行开始时刻你看了一下手表,make 运行结束时,你又看了一下手表,两次时间的差值就是本次 real 代表的值.
👃🔥🍪💲🐮
user:这个时间代表的是 make 运行在
用户态的 cpu 时间,什么意思?
要明白这个问题,就要讲一下
用户态和
核心态:
👀🎢🍖🚷🐕
引用核心态(Kernel Mode):
在核心态,代码拥有完全的、不受任何限制的访问底层硬件的能力。可以执行任意的CPU指令,访问任意的内存地址。内核态通常情况下,都是为那些最底层的,由操作系统提供的,可信可靠的代码来运行的。内核态的代码崩溃将是灾难性的,它会影响到整个系统。
—– In Kernel mode, the executing code has complete and unrestricted access to the underlying hardware. It can execute any CPU instruction and reference any memory address. Kernel mode is generally reserved for the lowest-level, most trusted functions of the operating system. Crashes in kernel mode are catastrophic; they will halt the entire PC.
✊🚂🥚♾🦟
用户态(User Mode):
在用户态,代码不具备直接访问硬件或者访问内存的能力,而必须借助操作系统提供的可靠的,底层的APIs来访问硬件或者内存。由于这种隔离带来的保护作用,用户态的代码崩溃(Crash),系统是可以恢复的。我们大多数的代码都是运行在用户态的。
🧑🍳💄✏😤👀
—– In User mode, the executing code has no ability to directly access hardware or reference memory. Code running in user mode must delegate to system APIs to access hardware or memory. Due to the protection afforded by this sort of isolation, crashes in user mode are always recoverable. Most of the code running on your computer will execute in user mode.
所以用人话来说 user 这个时间,就是指程序 make 运行在用户态的 CPU 时间(如果是多核/多线程同时工作,那耗时就是多核 CPU 耗时相加),CPU 时间不是墙上的钟走过的时间,而是指CPU工作时间。
sys : 这个时间代表的是 make 运行在核心态的 CPU 时间。
🧓🕶🧬😳✊