UNIX系统中用户cpu时间和系统cpu时间的区别
Unix系统有一个时间实用程序,允许用户查看他们的应用程序在哪些地方花费了大量的时间来处理。这个实用程序的语法如下:
time <command-to-be-timed>
其结果一般有以下三类:
real <time>
user <time>
sys <time>
User-CPU-Time
用户- cpu时间是处理器处理应用程序中的代码所花费的时间。它通常被称为在用户空间上运行,而不是在内核空间中运行。当你开发你的应用程序时,你可能已经写了编程结构,如条件、表达式、循环语句、分支等。客户端实际编写代码所花费的时间是通过 user-cpu-time .
System-CPU-Time
系统cpu时间是进程处理内核代码所花费的时间。在编写应用程序时,开发人员需要写入系统输出,从系统输入读取,并访问本地磁盘资源,如文件、数据库等。这些跨应用程序的横切关注点是通过操作系统提供的系统调用来解决的。这个执行所花费的时间通常被称为 system-cpu-time .
Real实时时间
实时时间是指从应用程序开始的时间和应用程序完成其任务的时间开始的总时间。它还可能包括等待轮到它处理或等待资源以成功执行程序所花费的时间。
用户cpu时间和系统cpu时间的区别
S. No. | User-CPU-Time | System-CPU-Time |
---|---|---|
1. | 它是应用程序在执行用户编写的代码时所花费的时间 | 它是应用程序在执行内核代码时所花费的时间度量 |
2. | 在基于unix的系统中,它通常被表示为“用户”,以响应时间效用。 | 在基于unix的系统中,它通常被表示为“sys”,以响应时间效用。 |
3. | 用户可以分析和优化所花费的时间。 | 系统所花费的时间取决于底层内核的系统调用。 |
示例:
#include<stdio.h>
#include<sys/types.h>
#include<stdlib.h>
#include<unistd.h>
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