我正在尝试处理大小约为4g字节的文件。我希望它是多线程的,所以我将使用seek来调整文件处理程序。用多线程处理文件的正确方法是什么?
首先我会确定在哪里破坏文件,一旦完成,我将有一个搜索点阵列。
然后在每个线程我重新打开文件进行读取,e.g open my $fh2, '<input' or die $!;
这似乎愚蠢的。
有没有更好的解决方案?该文件太大,我无法直接将任何部分加载到内存中。
我正在尝试处理大小约为4g字节的文件。我希望它是多线程的,所以我将使用seek来调整文件处理程序。用多线程处理文件的正确方法是什么?
首先我会确定在哪里破坏文件,一旦完成,我将有一个搜索点阵列。
然后在每个线程我重新打开文件进行读取,e.g open my $fh2, '<input' or die $!;
这似乎愚蠢的。
有没有更好的解决方案?该文件太大,我无法直接将任何部分加载到内存中。
创建一个boss模型,'boss'进程将读取数据&传递给'workers'。
你需要重新思考你在做什么 - I/O并行性很差。有四个线程试图读取同一个文件的不同部分可能会比仅使用一个线程慢很多。最好的解决方案是让一个线程读取块,然后传递给其他线程进行处理。 – gustafc
@gustafc我认为每行处理的部分都很慢,但由于我无法预加载整个文件..所以多线程读取文件看起来像是一个解决方案 – daisy
@gustafc啊我似乎得到它 – daisy