使用2个线程而不是1个线程进行排序似乎更慢

时间:2016-07-11 14:06:24

标签: python multithreading performance sorting mergesort

我从 Python 中的线程开始,并尝试实现合并排序,在开始时,作业被分成2个线程。我使用collections.dequeitertools.islicethreading.Thread

我在开头创建了两个线程,它们正常地执行了一半的工作,然后我加入它们并合并结果。但是我注意到它比两个线程更长(几乎是两倍),而不是正常情况下

这怎么可能? Here is a link to the code,如果需要,我可以在这里重现主要部分(我也在Code Review SE上发布了这个问题,而我还是要保留这个问题)

是否与this问题相关(在 C ++ 中似乎是一个类似的问题)?非常感谢你。

1 个答案:

答案 0 :(得分:1)

  

这怎么可能?

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

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

  

是否与此问题有关?

没有。 GIL是CPython的财产。与虚假分享完全不相干。

  

使用两个线程比使用正常情况时需要更长的时间(几乎是两倍)。

这是因为GIL不支持共享内存多线程。因此,您基本上按顺序两次运行代码。