UNIX 中用户 CPU 时间和系统 CPU 时间的区别
Unix 系统有一个时间实用程序,允许用户查看他们的应用程序在哪里花费了大量时间来处理。该实用程序的语法如下:
time
其结果一般分为以下三类:
real
用户 CPU 时间:
用户 CPU 时间是处理器处理应用程序中的代码所花费的时间。它通常被称为在用户空间上运行,而不是在内核空间中。当您开发应用程序时,您将编写诸如条件、表达式、循环语句、分支等编程结构。客户端编写的实际代码所花费的时间是通过user-cpu-time来衡量的。
系统 CPU 时间:
System-CPU-time 是进程处理内核代码所花费的时间。对应用程序进行编程时,开发人员需要写入系统输出,从系统输入读取,并访问本地磁盘资源,如文件、数据库等。这些跨应用程序的横切关注点通过操作系统的系统调用来解决提供。此执行所花费的时间通常称为system-cpu-time 。
真实的:
实时是从应用程序启动到应用程序完成任务所花费的总时间。它还可能包括等待轮到它处理或等待资源以成功执行程序所花费的时间。
User-CPU-time 和 System-CPU-time 的区别:
S. No. | user-cpu-time | system-cpu-time |
---|---|---|
1. | It is the measure of time taken by the application while executing the code written by the user | It is the measure of time taken by an application while executing kernel code |
2. | In Unix-based systems, it is generally represented as ‘user’ in response to time utility. | In Unix-based systems, it is generally represented as ‘sys’ in response to time utility. |
3. | The time taken can be analyzed and optimized by the user. | Time taken by the system depends on the system calls of the underlying kernel. |
例如:
#include
#include
#include
#include
int main()
{
int i=0;
sleep(60);
FILE* fpt;
fpt = fopen("/home/test/file1.txt","w");
for(int i=0;i<10000000;i++)
{
printf("");
fprintf(fpt,"%d",i);
}
fclose(fpt);
}
上面的代码首先休眠一分钟,在磁盘上打开一个文件资源,然后将变量“i”写入其中,直到循环终止并且在控制台上不打印任何内容。最后,它关闭从磁盘打开的文件资源。
我们可以编译这段代码:
gcc test.c
这将创建一个二进制./a.out
现在如果我们跑,
time ./a.out
在 UNIX 系统上,它可能会生成如下所示的输出。实际时间可能会根据程序逻辑和 CPU 利用率不时变化。
输出:
real 1m0.557s
user 0m0.452s
sys 0m0.084s