2014-02-25 127 views
0

我正在尝试处理大小约为4g字节的文件。我希望它是多线程的,所以我将使用seek来调整文件处理程序。用多线程处理文件的正确方法是什么?

首先我会确定在哪里破坏文件,一旦完成,我将有一个搜索点阵列。

然后在每个线程我重新打开文件进行读取,e.g open my $fh2, '<input' or die $!;

这似乎愚蠢的。

有没有更好的解决方案?该文件太大,我无法直接将任何部分加载到内存中。

+1

你需要重新思考你在做什么 - I/O并行性很差。有四个线程试图读取同一个文件的不同部分可能会比​​仅使用一个线程慢很多。最好的解决方案是让一个线程读取块,然后传递给其他线程进行处理。 – gustafc

+0

@gustafc我认为每行处理的部分都很慢,但由于我无法预加载整个文件..所以多线程读取文件看起来像是一个解决方案 – daisy

+0

@gustafc啊我似乎得到它 – daisy

回答

0

您可以试试Perl threads。所以你只会打开文件一次,但并行处理。

+0

我已经提到过线程.. ;-) – daisy

0

创建一个boss模型,'boss'进程将读取数据&传递给'workers'。

相关问题