前几天,我在一家公司面试时,被问到以下问题:如何计算具有4gb RAM的50gb文件中单词的出现次数。 窍门是不将整个文件加载到内存中,而是在继续移动文件指针时继续处理每个单词。 这样,我们可以用最少的内存资源轻松处理整个文件。
现在的后续问题是我们如何使用多线程来加快此过程? 解决方案是我们在文件的不同部分保留多个指针,并且每个线程同时读取文件的块。
最后,结果可以合并。
这只是显示了如何分割整个文件。 以及文件的各种指针。 假设文件的大小为1GB。 5个线程中的每个线程将处理200MB。 连续指针将从上一个指针的最后一个读取字节的字节开始读取。
实作
当涉及到多线程时,想到的更简单的选择就是例程。 我将引导您完成一个程序,该程序读取大文本文件并创建单词词典。
该程序演示了使用5个例程读取1GB文件,每个线程读取200MB。