Linux中time命令,我們經常用來計算某個程序的運行耗時(real),用戶態cpu耗時(user),系統態cpu耗時(sys)
time命令最常用的使用方式就是在其後面直接跟上命令和參數:
time <command> [<arguments...>]
舉個栗子1:
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ time sleep 2
real 0m2.005s
user 0m0.001s
sys 0m0.002s
小解其意:
real 0m2.005s :sleep這個程序運行耗時為0m2.005s
user 0m0.001s : 這個時間代表的是sleep運行在用戶態的cpu時間
sys 0m0.002s : 這個時間代表的是sleep運行在核心態的cpu時間。
用戶態(User Mode):
在用戶態,代碼不具備直接訪問硬體或者訪問內存的能力,而必須藉助操作系統提供的可靠的,底層的APIs來訪問硬體或者內存。由於這種隔離帶來的保護作用,用戶態的代碼崩潰(Crash),系統是可以恢復的。我們大多數的代碼都是運行在用戶態的。
核心態(Kernel Mode):
在內核態,代碼擁有完全的,不受任何限制的訪問底層硬體的能力。可以執行任意的CPU指令,訪問任意的內存地址。內核態通常情況下,都是為那些最底層的,由操作系統提供的,可信可靠的代碼來運行的。內核態的代碼崩潰將是災難性的,它會影響到整個系統。
為什麼要區分Kernel Mode 和 User Mode:
隔離保護,使得系統更穩定。
好,講完用戶態和核心態之後,我們來看user time,說過了,這個指的是程序foo運行在用戶態的cpu時間,cpu時間不是牆上的鍾走過的時間,而是指CPU工作時間。
舉個栗子2:
#time -p 不顯示單位
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ time -p sleep 2
real 2.00
user 0.00
sys 0.00