我system.time(expression)
用来衡量R函数的执行时间。
我得到的电话输出
system.time(myfunction())
是:
user system elapsed
117.36 5.65 127.86
“用户”和“系统”如何衡量?
Answers:
在?proc.time
(system.time()
返回class的对象"proc.time"
)中对此进行了讨论:
Details:
‘proc.time’ returns five elements for backwards compatibility, but
its ‘print’ method prints a named vector of length 3. The first
two entries are the total user and system CPU times of the current
R process and any child processes on which it has waited, and the
third entry is the ‘real’ elapsed time since the process was
started.
....和
Value:
....
The definition of ‘user’ and ‘system’ times is from your OS.
Typically it is something like
_The ‘user time’ is the CPU time charged for the execution of user
instructions of the calling process. The ‘system time’ is the CPU
time charged for execution by the system on behalf of the calling
process._
我所读过的关于时间user
和system
经过时间的最清晰的解释是威廉·邓拉普(William Dunlap)在[R-help]上提供的:
“用户CPU时间”给出了当前进程(即,当前的R会话)所花费的CPU时间,“系统CPU时间”给出了内核(操作系统)代表当前进程所花费的CPU时间。操作系统用于打开文件,执行输入或输出,启动其他进程以及查看系统时钟等操作:涉及许多进程必须共享的资源的操作。
尽管?proc.time
返回的内容类似,但对我来说,这种描述要容易得多。
由于无论如何都是通用的,因此来自维基百科:
首先,“用户CPU时间”一词可能会引起误解。需要明确的是,总时间(实际CPU时间)是CPU花在对某个程序执行某些操作上的时间量和CPU花在代表该程序对内核执行系统调用上的时间量的总和。当程序循环访问数组时,它正在累积用户CPU时间。相反,当程序执行诸如exec或fork的系统调用时,它正在累积系统CPU时间。
http://en.wikipedia.org/wiki/Time_(Unix)#User_Time_vs_System_Time
由于这些时间变量是由操作系统定义的,因此您可以通过man time
在shell中执行(在Unix上)来检索有关如何计算它们的信息:
...这些统计信息由(i)调用和终止之间经过的实时时间,(ii)用户CPU时间(由times(2)返回的结构tms中
tms_utime
and的tms_cutime
值之和)和(iii)系统CPU时间(由times(2)返回的struct tms中tms_stime
和的总和tms_cstime
)。
提到的时间变量的定义可以在这里找到:
tms_utime
用户CPU时间。
tms_stime
系统CPU时间。
tms_cutime
终止子进程的用户CPU时间。
tms_cstime
终止子进程的系统CPU时间。
在daroczig的答案以及SO的其他地方描述了对用户时间和系统时间之间差异的澄清:
该
tms_utime
元素是花费在执行你的代码量,或在C库中的代码。该tms_stime
元素是在内核中代表您执行代码所花费的时间。