单线程和多线程读取磁盘数据时间验证代码
threadtest.c
#include <unistd.h>
#include <stdio.h>
#include <time.h>
int main()
{
char str[][5]={"1.ts","2.ts","3.ts","4.ts","5.ts","6.ts","7.ts","8.ts","9.ts"};
pid_t pid;
int i=0;
clock_t start,end;
start = clock();
for(;i<9;i++)
{
if(pid=fork()==0)
{
//execl("freadtest ",str[i]);
execl("./freadtest","./freadtest",str[i],(char*)0);
}
}
end = clock();
printf("totaltime%ld\n", (end - start)/60);
//eyyxecl("./freadtest","./freadtest","1.ts",(char*)0);
return 0;
}
freadtest.c
#include <stdio.h>
#include <time.h>
int main(int argc,char *argv[])
{
//sleep(10);
FILE *in = NULL;
in = fopen(argv[1],"r");
char packet[188*20];
clock_t start,end;
start = clock();
while(fread(packet,1,188*20,in))
{
}
system("echo path>>aa.txt");
end = clock();
printf("%ld\n", (end - start)/60);
}
9个文件是相同的文件。
一‘读取9个文件
./threadtest
结果:
0
43166
54500
56333
55333
55166
56000
55833
58000
56333
totaltime 打印出来为0。
版主提醒过我,机械磁盘读取没有多线程只说,那么,把freadtest.c里面的时间打印出来相加就可以了吧,
cpu 的wa在10%左右。
二。读取一个文件
./freadtest 1.ts
结果:
32333
也就是说单个文件的读取比多线程读取文件的时间反而要少。
以上的理解不知道对不对,大牛们帮我看看吧,疑问是我这里其实是创建了9个进程,不知道能不说说明多线程同时读取磁盘会造成i/o等待的问题。