【发布时间】:2011-10-12 02:44:13
【问题描述】:
我的问题是应用程序加载数千个文件所需的时间太长。是的,我知道这需要很长时间,但我想让它更快一点。我所说的“加载”是打开文件以获取其描述符,然后读取它的前 100 个字节左右。
所以,我的主要策略是创建第二个线程来打开和关闭(不读取任何内容)所有文件。这似乎有帮助,因为线程在主线程之前运行,我猜操作系统会提前缓存这些文件描述符,这样当我的主线程打开它们时,它就会快速打开。这实际上有所帮助,因为当我的主线程正在解析从这些文件中读取的数据时,线程可以开始缓存这些文件描述符。
所以我真正的问题是......我还能做些什么来加快速度?有哪些方法?有没有人成功做到这一点?
我听说过操作系统预取调用,但它是针对虚拟内存页面的。有没有办法告诉操作系统,嘿,我很快就会需要所有这些文件 - 我建议你提前开始为我收集它们。我的前瞻线程非常粗糙。
是否有我可以使用的低级磁盘技术?是否有可能有帮助的文件访问模式?现在,加载的文件都来自同一个文件夹。我想没有办法确定它们在磁盘上的确切位置以及磁盘打开的文件顺序是最快的。我也猜测磁盘有一些硬件来尽可能提高效率。
我的应用程序主要用于 Windows,但 unix 建议也会有所帮助。
如果有什么不同的话,我正在用 C++ 编程。
谢谢, -朱利安
【问题讨论】:
标签: io file-descriptor prefetch