我试图尽快一行一行地读取缓冲区

时间:2014-07-16 00:40:17

标签: c++ linux

我已将文件读入缓冲区(mmap),但它非常大,我必须对数据执行大量操作。

每一行(由\ n指定)独立于其他行,因此我不需要任何上下文。

我想以线程方式做到这一点。我不确定这里的最佳方法。

如果我产生X线程,那么获取这个文件的最快方法是什么?我可以像#3;线程1,从0-X读取。线程2,从X + 1-Y等读取" ?

1 个答案:

答案 0 :(得分:1)

基本假设是你有N个核心,M MB的可用物理内存,F是文件的大小。最佳结果是所有核心和所有物理内存都在使用中,但没有分页。典型数字可能是8核和6GB可用内存。

一个合理的起点是:

  1. 使用1个主线程和(N-2)个工作线程,为操作系统留下1个线程。
  2. 允许每个工作人员使用M / N MB内存(大约750MB,但偏低)
  3. 每个线程使用低级二进制I / O(取决于O / S)读取文件块以填充其分配的内存。
  4. 每个帖子都会搜索文本行,然后退出。
  5. Master根据需要生成新线程来处理文件(假设F> M)。 Master还处理跨越块的边缘情况。
  6. 这应该使所有内核保持接近最大CPU,系统线程执行大部分I / O.在读取文件之前,I / O通道应该是饱和的,并且I / O将与CPU重叠。检查没有分页很重要。调整块大小以最大化重叠。