有没有办法同时有效地读取多个文件?

时间:2011-10-28 16:38:32

标签: performance file-io

我想对数千个文件同时进行一些处理。抓取所有文件的第一个字节并执行操作,转到下一个字节等。文件可以是任何大小,因此将它们全部加载到内存中可能会让人望而却步。

我担心由于操作系统文件描述符的限制,只是天真地打开数千个文件并阅读它们似乎可能会遇到问题。

但是我想,循环和打开/关闭文件效率会相当低。

是否有一些有效的机制来处理我正在尝试做的事情?

注意:此功能可能会被分发以使用我无法控制的机器,因此我不能只更改操作系统上的设置。

1 个答案:

答案 0 :(得分:0)

  

我想同时处理数千个文件。抓取所有文件的第一个字节并执行某些操作,转到下一个字节等。

这些文件是否足够小,您可以立即将它们全部读入内存。如果是这样,那么一次读取一个文件,然后一次一个字节处理所有文件。

  

我担心由于操作系统文件描述符的限制,只是天真地打开数千个文件并阅读它们似乎我可能会遇到问题。

你可能。找出答案的唯一方法是尝试。

  

但是我想,循环和打开/关闭文件效率会相当低。

是的。但是,如果您无法将所有文件读入内存,并且您的操作系统一次无法打开数千个文件,那么这是您的最后手段。

您可以做的是找出系统可以处理的同时打开文件的限制。我们只是为了讨论而说,您的系统一次可以打开100个文件,并且有2,500个文件需要处理。

然后你的过程看起来像这样。

  • 打开前100个文件。
  • 编写一个输出文件,其中包含100个文件中的第一个字节,然后是100个文件中的第二个字节,依此类推。
  • 如果100个文件的字节长度不同,请处理您可能遇到的任何问题。

现在,在通过所有文件运行此过程后,您将拥有25个中间文件。

然后你的第二个过程看起来像这样。

  • 打开25个中间文件。
  • 处理每个文件的前100个字节。

您可以通过对操作系统的实验或研究来确定实际数字(同时打开的文件,中间文件的数量)。

相关问题