单线程和多线程读取磁盘数据时间验证代码

HarlanC 2013-08-20 04:42:16
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等待的问题。
...全文
463 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
HarlanC 2013-08-29
  • 打赏
  • 举报
回复
引用 3 楼 qq120848369 的回复:
不会的, 与磁盘阵列无关系, 机械磁盘单线程I/O最快, 可以写满网卡和磁盘带宽, 关键是线程除了I/O不要做其他占用CPU时间的事情, 比如内存操作。
你好,再请教几个问题,多谢啊,先实现了您说的4KB,但效果不好。 1.读写磁盘用的fread 和fwrite,好像这两个函数是有缓存的,特别频繁的调用这两个函数会不会造成i/o负担? 2.现在的服务器cpu性能很好,空闲率(50%-70%),那我现在是不是可以加大读写的大小,例如,您说的4KB,那么我是不是可以加到40KB,以充分利用cpu.(因为cpu利用率不高,所以将读写操作分离一个线程就先没有必要了吧) 3.现在是启动了多个进程,每个进程启一个线程来对磁盘进行读写,我如何才能保证单线程操作磁盘呢? 非常感谢!!!!!
qq120848369 2013-08-20
  • 打赏
  • 举报
回复
不会的, 与磁盘阵列无关系, 机械磁盘单线程I/O最快, 可以写满网卡和磁盘带宽, 关键是线程除了I/O不要做其他占用CPU时间的事情, 比如内存操作。
HarlanC 2013-08-20
  • 打赏
  • 举报
回复
引用 1 楼 qq120848369 的回复:
机械磁盘顺序读写最快,也就是说单线程最快。
如果是磁盘阵列呢,用户代码使用多线程会不会比单线程读写文件效率要高?
qq120848369 2013-08-20
  • 打赏
  • 举报
回复
机械磁盘顺序读写最快,也就是说单线程最快。

1,025

社区成员

发帖
与我相关
我的任务
社区描述
Linux /Unix kernel支持不同的硬件体系,X86, ARM, MIPS, 等等
社区管理员
  • CPU和硬件区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧