2016-07-11 25 views
0

我开始于Python中的线程,并尝试实现合并排序,其中开始时作业被分解为2个线程。我正在使用collections.deque,itertools.islice,threading.Thread排序似乎比2个线程慢1

我在开始时创建了两个线程,他们通常每做一半工作,然后加入他们并合并结果。但是我注意到它比两个线程的长度要长(几乎是两倍长),比我通常做的要多

这怎么可能? Here is a link to the code,我可以根据需要在这里繁殖的主要部分(我贴在Code Review SE这个问题也和我宁愿保持这种一短)

它是链接到this问题(似乎是一个类似的问题在C++)?非常感谢你。

+1

可能重复[python多线程比串行慢?](http://stackoverflow.com/questions/10789042/python-multi-threading-slower-than-serial) –

+0

为什么downvote? – BusyAnt

+2

尽管CPython的GIL限制了多线程,但您仍然可以使用'multiprocessing'。 –

回答

1

这怎么可能?

与C++不同,由于GIL的原因,Python很难并行化。

虽然collections.dequeappendpopleft是线程安全的,但这并不能保证它们在非串行范例中表现良好。

它与这个问题有关吗?

不.GIL是CPython的财产。这与虚假分享完全脱节。

与两个线程相比,它通常会花费更长的时间(几乎是2倍长)。

这是因为GIL不支持共享内存多线程。因此,你基本上是连续运行你的代码两次

+0

所以你的意思是我不能只用多线程就能使这个速度更快?我能做什么 ? – BusyAnt

+1

@BusyAnt我不推荐Python用于多线程应用程序。优先选择C++,Java,Scala或其他任何东西。 – erip

+0

好的,我会记住的。你能说这里有什么东西在吃我的程序吗?线程创建?在线程之间切换?还有别的吗?我不确定我在这里完全理解了...... – BusyAnt