问题描述
我写了一个小程序来测量c write()调用的系统时间。我一直将缓冲区附加到文件,直到达到文件大小。但是对于两个不同的缓冲区大小,我得到的数字完全不同。这是一个片段-
case#1:
char buffer1[] = malloc(4* 1024);
for(int i=0; i< 1048576; i++){
int w = write(outputfile,buffer1,sizeof(buffer1));
}
case#2:
char buffer2[] = malloc(1024* 1024);
for(int i=0; i< 4096; i++){
int w = write(outputfile,buffer2,sizeof(buffer2));
}
在两种情况下,程序都将1048576x4kB = 4096x1024kB =〜4096 MB的数据写入文件。
在我的机器(8 gig ddr3 ram,酷睿i7、240gb ssd)中,案例1花费了14.96 sys的系统时间来完成,给我的吞吐量约为274 MB / s。
第2种情况需要花费0.9秒的系统时间来完成,这使我的吞吐量约为4551 MB / s。
我对其他一些缓冲区大小进行了一些中间运行,它们还会产生变化很大的数字。
我知道较大的缓冲区大小意味着对write()函数的调用次数减少。但是,难道每个调用都应该花费更长的时间,并且最终,与缓冲区大小无关,完成对文件的写入所花费的总时间应该是相同的吗?为什么吞吐量因变化的缓冲区大小而变化太大?
这是程序:https://drive.google.com/file/d/1Bj_CnO8DqFrOO3WwbsZbzFYjHLijTW7A/view?usp=sharing
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)