Python 带线程的基本Mapreduce比顺序版本慢
我正在尝试使用线程使用mapreduce执行单词计数器,但是这个版本比顺序版本慢得多。对于300MB的文本文件,mapreduce版本大约需要80秒,而顺序版本则需要更少的时间。我的问题是因为不理解为什么,因为我已经完成了map reduce的所有阶段(split、mapping、shuffle、reduce),但是我不明白为什么它会慢一些,因为我已经使用了大约6个线程来做测试。我在想,与执行时间相比,线程的创建可能是昂贵的,但由于它需要大约80秒的时间,我认为这显然不是问题所在。你能看看代码是什么吗?我很确定代码运行得很好,问题是我不知道是什么导致了速度慢。Python 带线程的基本Mapreduce比顺序版本慢,python,multithreading,mapreduce,Python,Multithreading,Mapreduce,我正在尝试使用线程使用mapreduce执行单词计数器,但是这个版本比顺序版本慢得多。对于300MB的文本文件,mapreduce版本大约需要80秒,而顺序版本则需要更少的时间。我的问题是因为不理解为什么,因为我已经完成了map reduce的所有阶段(split、mapping、shuffle、reduce),但是我不明白为什么它会慢一些,因为我已经使用了大约6个线程来做测试。我在想,与执行时间相比,线程的创建可能是昂贵的,但由于它需要大约80秒的时间,我认为这显然不是问题所在。你能看看代码是
最后一件事,当使用超过300MB的文本文件时,程序会填满我电脑的所有ram内存,有没有办法对其进行优化?首先,有几条免责声明:
+
标记它们),另一些则反对(-
)。让我们来看看它们:
小的数据,您不会得到任何提升,因为协调开销将更大)
现在实施中的主要问题是第2项和第3项
首先,工人们没有并行工作。并行化的任务部分受CPU限制。在python中,单个进程的线程不能使用多个CPU。所以在这个程序中,它们永远不会并行执行。它们共享同一个CPU
此外,他们在DICT上执行的每个修改操作都使用锁定/解锁,这比不需要同步的顺序版本慢得多
要加快算法速度,您需要:
使用多处理而不是多线程(这样可以使用多个CPU进行处理)
以一种不需要工作人员在工作时进行同步的方式构造算法(每个工作人员应使用自己的dict存储中间结果)
我理解。。。因此,我将尝试多处理。谢谢