读书人

写入速度的有关问题。

发布时间: 2012-04-20 15:27:03 作者: rapoo

写入速度的问题。。。
最近在做一个关于写文件的东东,其中有一个问题很是不解:单线程全速写文件比多线程写文件要快?! ---我也不知道这个结论对不对,所以来问一下。
注:每一个线程对应一个文件。下面是写文件的代码。其中FIndex为线程的顺序。。。这个不会有重复的。
procedure TTestThr.Execute;
var
FileStr: String;
FileHandle: integer;
Str: String;
begin
{ Place thread code here }
Str:= '我们都是中国人,我们都是中国人,我们都是中国人, ';
Str:= Str+ Str+ Str+ cNewLine;
FileStr:= 'ceshi '+ IntToStr(FIndex)+ '.txt ';
FileHandle := FileCreate(FileStr);
try
while not Terminated do
begin
FileWrite(FileHandle, Str[1], Length(Str));
//Sleep(1);
end;
finally
FileWrite(FileHandle, '#13 ', 1);
FileClose(FileHandle);
end;
end;

[解决办法]
如果楼主的机器只有一个CPU,并且不支持HT技术,那样的话,如果一个程序开有多个线程,则同样长的时候,由于CPU资源只有一份,多个线程来分CPU的时间做能做的事当然会比,全部CPU资源用于一个线程做的事情少,不知道楼主有没有把几个线程的文件内容总量加起来?另外多个线程之间切换还需要时间,这些耗损有没计算上去?为什么通常说在写文件的时候要开立线程,原因并不是在于多线程写文件的速度比单线程快,而是写文件速率有限而整个过程需要时间,必须要进行相当时间的同步,而这些同步时间线程是处于等待的,开立线程来写文件,可以使得工作线程(可能是主线程,也可能是另外一个子线程)在将需要写入文件的内容移动到缓冲区(内存,比如变量啦,内存块等),而继续工作。
[解决办法]
还有,无论是单线程还是多线程,硬盘同时都只能写一个位置。磁盘阵列除外。

读书人网 >.NET

热点推荐