为什么实时可以低于用户时间

我有一个转换视频文件的脚本,并且我在网络服务器上运行它以获取考试信息,并通过 time 测量它的时间。 结果我看到:

real    2m48.326s
user    6m57.498s
sys     0m3.120s

为什么活的时间比个人时间低那么多? 这与多线程有任何联系吗? 或者还有什么?

编辑: 而且我相信脚本运行了大约 2 分 48 秒

44
2022-06-07 14:37:37
资源 分享
答案: 2

只是为了说明已经说过的内容,两个线程进程进行了一些计算。

/*a.c/*
    #include <pthread.h>
    static void  * dosomething () {
        unsigned long a,b=1;
        for (a=1000000000; a>0; a--) b*=3;
        return NULL;
    }
    main () {
        pthread_t one, two;
        pthread_create(&one,NULL, dosomething, NULL);
        pthread_create(&two,NULL, dosomething, NULL);
        pthread_join (one, NULL);
        pthread_join (two, NULL);
    }
/* end of a.c */

编译

gcc a.c -lpthread

(这只是为了说明,在现实生活中我应该添加 -D_REENTRANT 标志)

$ time ./a.out

real    0m7.415s
user    0m13.105s
sys     0m0.032s

(时间是在具有两个慢速内核的 Intel Atom 上:))

18
2022-07-25 09:08:15
资源

您显示的结果有点奇怪,因为实时通常比其他两个大。

  • Real 时间是挂钟时间。 (我们可以用秒表来衡量)
  • User time 是过程中在用户模式下花费的时间量
  • Sys 是 CPU 时间投入到进程中的位

所以我的意思是,如果工作是由多个 cpu 同时完成的,那么 CPU 时间将高于过期的壁面时钟时间。

这是并发/多线程/并行类型的应用程序吗?

同样作为一个例子,当我发出 time find . 命令时,这就是我在 Linux 系统上得到的结果。 正如预期的那样,在这个单独的用户/单核过程中,经过的 real 时间比其他时间长得多。

real    0m5.231s
user    0m0.072s
sys     0m0.088s

一般规则是:

  • 真实<用户:该进程受CPU限制,并且在多个内核/CPU上充分利用相同的执行
  • real ≈ user:这个过程是 CPU 密集型的,并且没有并行执行的好处
  • real > user:进程是 I/O 绑定的。 在多核上执行肯定没有什么优势
58
2022-06-07 15:06:32
资源