情况:
1、我有大量(10000个或更多)的小文件(大概10k一个),我要打开每一个文件,从中取出数据,然后用我的线程进行处理。
2、我原来用的是单线程,速度不是很快,线程我改成多线程IO方式读取。效率不是很高(提高了10%)。为什么???
3、异步多线程IO合单线程IO到底怎么样处理才能提高很多效率???
4、采取什么方式处理我的情况会更合理???
望各位大哥帮帮。谢谢
1、我有大量(10000个或更多)的小文件(大概10k一个),我要打开每一个文件,从中取出数据,然后用我的线程进行处理。
2、我原来用的是单线程,速度不是很快,线程我改成多线程IO方式读取。效率不是很高(提高了10%)。为什么???
3、异步多线程IO合单线程IO到底怎么样处理才能提高很多效率???
4、采取什么方式处理我的情况会更合理???
望各位大哥帮帮。谢谢
所以如果你的处理数据的时间很短,而IO操作的时间很长,我想多线程和异步IO并不能解决你的问题。关注
map<CString,???,less<CString> > MyMap ;???应该怎么样保存比较好???谢谢
异步I/O只是把CPU的等待时间去作运算罢了
只有在多个线程并且写入和读取同时进行的时候,异步IO才能发挥威力。
reads [numsec] sectors from [head] [track] [sector]-------------------------------------------------------*/
char* ReadSectors(int head, int sector, int track, int numsec)
{
// getting logical sector from absolute head/track/sector ...
//计算扇区位置
int LogicalSector = (sector-1) +
(head*SECTORSPERTRACK) +
(track*SECTORSPERTRACK*NUMOFHEADS) ;char *buffer ;
HANDLE hDevice ;
HANDLE hDevice;
char* buffer = (char*)malloc (512*numsec);
strset ( buffer , ' ');
DWORD bytesread ;// getting a handle to the drive a: using
// CreateFile () function ....
//打开驱动器 \\.\A:
hDevice = CreateFile("\\\\.\\A:",
GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, NULL); if (hDevice == NULL)
{
MessageBox ("Failed !");
return NULL;
}
// setting the file pointer to the start of the
// sector we want to read .
//移动文件指针到需要读取位置
SetFilePointer (hDevice,
(LogicalSector*512),
NULL,
FILE_BEGIN); // reading sector(s) ...
//读数据
if (!ReadFile ( hDevice,
buffer,
512*numsec,
&bytesread,
NULL) )
{
/*
int err;
char error[10];
err=GetLastError ();
itoa (err, error, 10);
MessageBox (error, "Reading sectors ...Failed ");
return NULL ;
*/
}
//关闭
CloseHandle(hDevice); return buffer ;
}
你可以用数据库试试,不要用文件来对数据管理。
将文件压缩,充分减少磁盘i/o,加内存和cpu,提高处理速度