我想并行化下面的代码来加快速度,这是如何做到的?
代码:
void GetFile(string& foldername, vector<string>& output) {
DIR* dir;
struct dirent* DirEntry;
if ((dir = opendir(foldername.c_str())) != NULL)
{
while ((DirEntry = readdir(dir)) != NULL)
{
if (strcmp(DirEntry->d_name, ".") && strcmp(DirEntry->d_name, ".."))
{
string subfolder(foldername);
subfolder += "\\";
subfolder += DirEntry->d_name;
DIR* subdir;
if ((subdir = opendir(subfolder.c_str())) != NULL)
{
l(subfolder, output);
closedir(subdir);
}
else
{
string fullname(foldername);
fullname = fullname + '\\' + DirEntry->d_name;
output.push_back(fullname);
}
}
}
closedir(dir);
}
else
{
}
}
请帮帮我。我需要学习什么才能做到这一点?
你不太可能通过并行化来加快它的速度。代码受到磁盘驱动器速度的限制。
如果您的根文件夹有多个子文件夹,您可以尝试为每个这样的文件夹生成一个线程--只是为了确认它不会变得更快。
我想补充的是,现代驱动器能够对多个请求进行排队,并优化处理这些请求的顺序,因此您不是完全不可能看到性能的提高。