• [fw]Linux 的 time 指令


    Linux 的 time 指令

     

    Linux 有個很有意思的 time 指令,可以用來查看另一個指令的執行時間,例如執行 time helloworld 會顯示 helloworld 這支程式的執行時間。

    time 指令的返回值包含「實際時間 (real time)」、「用戶態 CPU 時間 (user CPU time)」及「核心態 CPU 時間 (system CPU time)」。其中,

    • real time 表示後面所接的指令或程式從開始執行到結束終止所需要的時間。簡單講,當一個程式開始執行瞬間看一下手錶記下時間,當程式結束終止瞬間再看一次手錶,兩次的時間差就是 real time。
    • user CPU time 表示程式在 user mode 所佔用的 CPU 時間總和。多核心的 CPU 或多顆 CPU 計算時,則必須將每一個核心或每一顆 CPU 的時間加總起來。
    • system CPU time 表示程式在 kernel mode 所佔用的 CPU 時間總和。

    所以,以下的想法就不一定成立:

    一:real time = user CPU time + system CPU time

    這裡舉一個比較極端的例子,假設我執行 time sleep 10 這個命令,time 會返回給我的訊息如下:

    real    0m10.003s
    user    0m0.004s
    sys     0m0.000s 

    因為動作是「睡 (sleep)」10 秒,從 sleep 指令下達到它結束終止共經過 10 秒,所以 real time 的值是 10 秒。但,sleep 指令在 user mode 及 kernel mode 都沒有佔用 CPU,所以 user CPU time 和 system CPU time 基本上都是「零」。

    二:real time > user CPU time + system CPU time

    這個式子若是在單核心、單顆的 CPU 上,通常有成立的可能。

    但,在多核心或多顆 CPU 的環境,卻往往可能出現 user CPU time + system CPU time > real time 的狀況。甚至我們在編譯大量的程式時,經常執行 time make -j2 或 time make -j4 的指令,往往得到的 user CPU time 值都可能大過 real time 值。

    延伸閱讀:

  • 相关阅读:
    HashMap 实现原理
    王东江网站
    网站建设
    mysql 查询 执行流程
    两个线程交替打印1到100
    三个线程交替打印十次ABC
    Java动态链接是什么意思
    双亲委派机制
    笔记
    redis集群搭建
  • 原文地址:https://www.cnblogs.com/bittorrent/p/3465454.html
Copyright © 2020-2023  润新知