在GHC的RTS统计数据中,CPU时间如何低于挂钟时间?

时间:2015-06-27 23:47:55

标签: haskell ghc

我有一个与-rtsopts相关联的程序,并使用+RTS -s进行调用,并且我得到了这个时间:

  INIT    time    0.000s  (  0.001s elapsed)
  MUT     time    4.047s  (  9.694s elapsed)
  GC      time    0.578s  (  0.514s elapsed)
  RP      time    0.000s  (  0.000s elapsed)
  PROF    time    0.000s  (  0.004s elapsed)
  EXIT    time    0.000s  (  0.000s elapsed)
  Total   time    4.625s  ( 10.209s elapsed)

这个程序运行了大约10秒钟。 它与线程RTS相关联,但它使用-N1,所以我不明白为什么在挂钟时间和CPU时间之间首先存在差异。

我刚在GHC用户指南中找到了这个:

  

接下来是经过的CPU时间和挂钟时间   运行时系统当时正在做什么。

那么,CPU时间是否低于挂钟时间有什么意义呢?

注意:我的计算机在执行程序时没有做任何艰苦的工作,当然也没那么多......这就是为什么我很困惑并且担心我的程序行为不端。

更新:我想我可能找到了罪魁祸首:RTS是否计算IO的CPU时间?如果没有,那可能是原因,有大量的写作。

1 个答案:

答案 0 :(得分:6)

挂钟时间包括等待网络,磁盘,用户输入等所花费的时间,而CPU时间仅包括主动花费在(确切地说)一个CPU上的时间。 (在多个CPU上进行计算时,将每个CPU上花费的时间加在一起。)