Подтвердить что ты не робот

Значение real, user и sys в выводе команды времени Linux

$ time ./Test 

real    0m2.906s
user    0m2.887s
sys     0m0.017s

Вот код программы:

#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;
}
4b9b3361

Ответ 1

Если вы посмотрите на manpage (man time), в нем говорится:

Команда time запускает указанную команду программы с данными аргументами. Когда команда заканчивается, время записывает сообщение на стандартный вывод, предоставляя статистику времени об этой программе. Эти статистические данные состоят из (i) пройденного реального времени между вызовом и завершением, (ii) времени пользовательского ЦП (сумма значений tms_utime и tms_cutime в struct tms, возвращаемых временами (2)), и (iii) (сумма значений tms_stime и tms_cstime в структуре tms, возвращаемых временами (2)).

В принципе, время user заключается в том, как долго ваша программа была запущена на процессоре, а время sys заключалось в том, как долго ваша программа ожидала, что операционная система выполнит для нее задачи. Если вы заинтересованы в бенчмаркинге, user + sys - подходящее время для использования. real может быть затронута другими запущенными процессами и более противоречива.