python - 关于python GIL的一个问题

标签 python multithreading gil

python GIL 的存在是否意味着在 python 多线程中,相同操作与在单线程中重复操作没有太大区别?

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

我尝试了两种方式的大数学运算。但它们似乎花费几乎相同的时间来完成。

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

最佳答案

Python 的线程得到的评价比它们应得的稍差。在三种(好吧,2.5 种)情况下,他们实际上为您带来了好处:

  • 如果非 Python 代码(例如 C 库、内核等)正在运行,其他 Python 线程可以继续执行。它只是纯 Python 代码,不能同时在两个线程中运行。因此,如果您正在执行磁盘或网络 I/O,线程确实可以为您带来一些好处,因为大部分时间都花在 Python 本身之外。

  • GIL 实际上不是 Python 的一部分,它是 CPython 的一个实现细节(核心 Python 开发人员致力于的“引用”实现,以及如果你只是在你的 Linux 机器上运行“python”或其他东西,你通常会得到。

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

  • 0.5 案例:即使您完全是纯 Python 并且看不到线程的性能优势很少或没有,但就开发人员时间和使用线程解决的难度而言,某些问题确实很方便。当然,这在一定程度上也取决于开发人员。

关于python - 关于python GIL的一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1912557/

相关文章:

python - 覆盖ziparchive中的文件

python - 如何快速创建一个 numpy 或 pandas 二维数组,其中两个轴都在一个范围内并且值是一个产品?

python - 使 numpy ndarray 矩阵对称

python - PEP-492 中的协同程序会绕过 Python 3.5 中的 GIL 吗?

python - 尝试访问矩阵外部时获取特定值

c++ - 可以(由编译器)使用多少线程来初始化全局对象(在函数 main 之前)

c# - 支持多线程的异步任务队列

c# - 异步组件和 WinForms

python - 为什么 Python 的 'append' 方法 'list' 是原子的,而 i = i + 1 不是原子的?

python - numpy 和全局解释器锁