《APUE》上提到了三個時間Real time, User time和Sys time。這三者是什麼關系呢?在使用time(1)命令的時候,為什麼real time < user time + sys time?(由於筆者的虛擬機為單核,顯示的結果不會出現此種情況。附網上看到的一種結果如下:
Real指的是實際經過的時間,User和Sys指的是該進程使用的CPU時間。
1. Real是牆上時間(wall clock time),也就是進程從開始到結束所用的實際時間。這個時間包括其他進程使用的時間片和進程阻塞的時間(比如等待I/O完成)。
2. User指進程執行用戶態代碼(核心之外)所使用的時間。這是執行此進程所消耗的實際CPU時間,其他進程和此進程阻塞的時間並不包括在內。
3. Sys指進程在內核態消耗的CPU時間,即在內核執行系統調用所使用的CPU時間。
那麼,為什麼進程開始到結束所經過的時間會比進程所消耗的用戶時間和系統時間(user time + sys time)小呢?
User+Sys為進程所使用的實際CPU時間。注意,如果有多個線程,User+Sys的時間有可能大於Real時間。同時,User和Sys時間包括子進程所使用的時間。
time命令的輸出數據是由幾個不同的系統調用得來的。User time和Sys time從wait(2)或times(2)系統調用(依賴不同的系統)得來。Real time是由gettimeofday(2)中結束時間和起始時間相減得到。不同的操作系統還可能有其他的信息,比如time可以記錄上下文切換的次數。
在多處理器的系統上,一個進程如果有多個線程或者有多個子進程可能導致Real time比CPU time(User + Sys time)要小,這是因為不同的線程或進程可以並行執行。