我有大量的文本文件。任务是计算这个庞大语料库中所有术语(唯一)的文档频率(包含某个术语的文档数量)。简单地从第一个文件开始并以序列化的方式计算所有内容似乎是一件愚蠢的事情(我承认我这样做只是为了看看它有多么灾难性)。我意识到,如果我以 Map-Reduce 方式进行此计算,这意味着将我的数据聚集成更小的部分并最终聚合结果,我会更快地获得结果。
我的 PC 有 4 个内核,所以我决定将我的数据分成 3 个不同的子集,并将每个子集提供给一个单独的线程,等待所有线程完成它们的工作并将它们的结果传递给另一个方法来聚合所有内容。
我用一组非常小的数据对其进行了测试,效果很好。在我使用实际数据之前,我用更大的数据集对其进行了测试,以便更好地研究它的行为。我启动了 jvisualvm 和 htop 来看看 cpu 和内存是如何工作的。我可以看到 3 个线程正在运行,并且 cpu 内核也很忙。但这些核心的使用率很少超过 50%。这意味着我的应用程序并没有真正使用我 PC 的全部功能。这与我的代码有关,还是应该如此。我的期望是每个线程都使用尽可能多的 cpu 核心资源。
我使用 Ubuntu。