一尘不染

有关python GIL的问题

python

python GIL的存在是否意味着在python多线程中 相同的 操作与在单线程中重复操作有什么不同?

例如,如果我需要上传两个文件,那么在两个线程中执行而不是一个接一个地上传它们有什么好处?

我以两种方式尝试了一次大型数学运算。但是他们似乎花费几乎相同的时间才能完成。

这似乎对我来说还不清楚。有人可以帮我吗?谢谢。


阅读 249

收藏
2021-01-20

共1个答案

一尘不染

Python的线程在说唱方面要比应有的差一些。在三种(实际上是2.5种)案例中,它们实际上为您带来了好处:

  • 如果非Python代码(例如C库,内核等)正在运行,则其他Python线程可以继续执行。这是纯Python代码,无法一次在两个线程中运行。因此,如果您正在执行磁盘或网络I / O,则线程确实可以为您带来收益,因为大部分时间都花在了Python本身之外。

  • GIL实际上不是 Python的 一部分,它是 CPython 的实现细节(核心Python开发人员从事的“参考”实现,通常只要在Linux机器上运行“ python”之类的东西就可以得到)。

Jython,IronPython和其他任何重新实现的Python通常都 没有 GIL,并且多个纯Python线程 可以 同时执行。

  • 0.5的情况:即使您完全是纯Python的用户,也几乎没有从线程中获得性能收益,但就开发人员的时间和解决线程的难度而言,某些问题确实很方便。当然,这也部分取决于开发人员。
2021-01-20