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

Mas*_*tic 1 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)
Run Code Online (Sandbox Code Playgroud)

这个程序运行了大约10秒钟.它与线程RTS相关联但是它使用了-N1我不明白为什么在挂钟时间和CPU时间之间首先会有区别.

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

接下来是CPU时间和挂钟时间,按运行时系统当时的操作细分.

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

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

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

Dan*_*ner 6

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