我必须提高处理一些大文件(高达4GB)的性能,我认为,我可以使用48个硬件线程来处理这个文件。但在工作服务器上,还有磁性硬盘。 我不允许将此文件加载到RAM。 我的问题是,这个多线程读取文件是否可行?线程是否必须在另一个线程上等待从文件结束读取特定行,因此在硬件级别上这将是顺序处理,但在代码级别,处理将是多线程的。
答案 0 :(得分:1)
当你说你可能没有将文件加载到ram中时 - 你的意思是整个文件一次?要从磁盘中读取它仍在将其读入内存,您可能不会长时间将其保留在内存中。
读取文件的最快方法仍然是文件的顺序读取,而不是让多个线程移动磁盘头。如果你可以从读取数据中分离数据处理,你可以让一个线程读取数据,顺序将读取的块传递给执行处理的其他线程。
在问题上没有标记任何语言,因此任何人都难以回答使用更精确的技术。例如 - 在go中,我将有1名工作人员按顺序读取文件,将读取的行放在通道上,并创建处理通道所需的工作程序。