如果要選 linux 下最容易被忽視的命令,time 應該算乙個。簡單來說,它是乙個用來計算命令執行時間的工具,之所以說它容易被忽視,一方面很多人根本不知道 time 的存在,而是習慣在命令啟動前後記錄兩個時間戳,然後手動計算命令執行時間;另一方面很多人雖然知道 time 的存在,但是卻並沒有真正理解它的含義。
下面讓我們通過若干例子來理解 time 的真正含義:
shell> time ls大概意思是 ls 命令執行花了 0.003 秒,其中使用者態花了 0.001 秒,核心態花了 0.002 秒,看上去似乎「real = user + sys」?此等式是否成立,在回答這個問題之前我們不妨看看 real、user、sys 的確切含義,如下定義源自 stackoverflow:real 0m0.003s
user 0m0.001s
sys 0m0.002s
總的來說,real 是我們直觀感受到的消耗的時間,如果命令執行時被堵塞了,那麼堵塞時間也是被統計在內的, user 統計在使用者態態模式下消耗的 cpu 時間,如果命令執行時被堵塞了,那麼堵塞時間並不被統計在內,sys 統計在核心態模式下消耗的 cpu 時間,如果命令執行時被堵塞了,那麼堵塞時間並不被統計在內。
看上去是否統計堵塞時間是區分 real 和 user、sys 的關鍵,看看下面這個 sleep 例子:
shell> time sleep 1那麼除了堵塞時間,還有別的關鍵點麼,讓我們再看看下面兩個例子:real 0m1.002s
user 0m0.001s
sys 0m0.001s
shell> time find /etc -type f | xargs -n1 -i{} cat {} > /dev/null前後兩個例子的區別在於後者在使用 xargs 的時候通過「-p」選項啟用了多程序,換句話說,後者可以同時用到多個 cpu。real 0m2.050s
user 0m0.626s
sys 0m1.533s
shell> time find /etc -type f | xargs -n1 -i{} -p2 cat {} > /dev/null
real 0m1.079s
user 0m0.681s
sys 0m1.486s
怎麼樣?看似簡單的 time 命令,是不是遠比你想的要複雜得多!
被忽視的 partition 演算法
如果你學習過演算法,那麼肯定聽說過快速排序的大名,但是對於快速排序中用到的 partition 演算法,你了解的夠多嗎?或許是快速排序太過於光芒四射,使得我們往往會忽視掉同樣重要的 partition 演算法。partition 可不只用在快速排序中,還可以用於 selection algorith...
被忽視的IT金飯碗
談高校學子對軟體測試認識的三大誤區 軟體測試是保障軟體質量的重要環節,企業對於軟體質量意識的逐步增強,促使國內軟體測試人員的地位不斷提公升。但中國高等教育往往落後企業實際發展3 5年,所以在高校學子心中,重開發 輕測試的思想依然嚴重。許多優秀的畢業生甚至對測試工作存在偏見,致使軟體測試人才缺口進一步...
被忽視的 partition 演算法
如果你學習過演算法,那麼肯定聽說過快速排序的大名,但是對於快速排序中用到的 partition 演算法,你了解的夠多嗎?或許是快速排序太過於光芒四射,使得我們往往會忽視掉同樣重要的 partition 演算法。partition 可不只用在快速排序中,還可以用於 selection algorith...