Linux time命令输出中real,user和sys的含义

260*_*607 34 linux time

$ time ./Test 

real    0m2.906s
user    0m2.887s
sys     0m0.017s
Run Code Online (Sandbox Code Playgroud)

这是程序代码:

#include <iostream>
#include <map>

void func_a() {
    std::map<int, int> m;
    for (unsigned int i = 0; i < 10000; i++) {
        m.insert(std::pair<int, int>(i, i));
    }
}

void func_b() {
    std::map<int, int> m;
    for (unsigned int i = 0; i < 1000000; i++) {
        m.insert(std::pair<int, int>(i, i));
    }
}

int main() {
    func_a();
    func_b();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Luk*_*eGT 35

如果你看一下manpage(man time),它会说:

time命令使用给定的参数运行指定的程序命令.命令完成后,时间将消息写入标准输出,给出有关此程序运行的时序统计信息.这些统计数据包括(i)调用和终止之间经过的实际时间,(ii)用户CPU时间(由时间(2)返回的结构tms中tms_utime和tms_cutime值的总和),以及(iii)系统CPU时间(由times(2)返回的struct tms中tms_stime和tms_cstime值的总和).

基本上,user时间是程序在CPU上运行的sys时间,时间是程序等待操作系统执行任务的时间.如果您对基准测试感兴趣,那么这user + sys是一个使用的好时机. real可能会受到其他正在运行的进程的影响,并且更加不一致.