编写一个计算密集型程序和一个I/O密集型程序,编译运行,用top命令观察对CPU sharing的影响以及对应的COMMAND
时间: 2024-03-23 13:43:59 浏览: 96
论文研究-一种适应数据与计算密集型任务的私有云系统实现研究.pdf
下面是一个简单的计算密集型程序和一个I/O密集型程序的示例,并使用top命令观察对CPU sharing的影响:
计算密集型程序示例(程序名为compute.c):
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define SIZE 100000000
int main() {
double *arr = (double *)malloc(sizeof(double) * SIZE);
double sum = 0.0;
for (int i = 0; i < SIZE; i++) {
arr[i] = sin((double)i);
sum += arr[i];
}
printf("Sum: %f\n", sum);
free(arr);
return 0;
}
```
编译并运行:
```
gcc compute.c -o compute
./compute
```
使用top命令观察对CPU sharing的影响及对应的COMMAND:
```
top - 14:59:00 up 1:14, 1 user, load average: 1.00, 0.94, 0.89
Tasks: 73 total, 1 running, 72 sleeping, 0 stopped, 0 zombie
%Cpu(s): 99.7 us, 0.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 7945.0 total, 1528.5 free, 4637.4 used, 1779.0 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 2791.0 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1528 root 20 0 149336 25528 21716 R 100.0 0.3 0:01.36 compute
```
可以看到,CPU的使用率达到了100%,对应的COMMAND是compute,说明这个程序占用了全部CPU资源。
I/O密集型程序示例(程序名为io.c):
```c
#include <stdio.h>
#include <stdlib.h>
#define SIZE 100000000
int main() {
FILE *fp = fopen("test.txt", "w");
if (fp == NULL) {
printf("Error opening file!\n");
return 1;
}
for (int i = 0; i < SIZE; i++) {
fprintf(fp, "%d\n", i);
}
fclose(fp);
return 0;
}
```
编译并运行:
```
gcc io.c -o io
./io
```
使用top命令观察对CPU sharing的影响及对应的COMMAND:
```
top - 15:07:34 up 1:22, 1 user, load average: 0.23, 0.48, 0.50
Tasks: 74 total, 1 running, 73 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 7945.0 total, 1528.5 free, 4636.4 used, 1780.1 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 2792.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1555 root 20 0 26648 2132 1784 S 0.0 0.0 0:00.00 io
```
可以看到,CPU的使用率为0%,对应的COMMAND是io,说明这个程序几乎没有占用CPU资源,因为它的主要操作是I/O操作,所以占用了大量的I/O资源。
阅读全文