python为什么没有多线程 python多线程为什么不好

坦白说,Python的多线程在某些场景下表现并不好。
这个问题因几个要点而变得复杂。
我们先来说说最重要的事情。
Python 的 GIL(全局解释器锁)限制了并行执行。
即使在多核 CPU 上,也只有一个线程可以执行 Python 字节码。
比如我去年跑的一个项目,在多线程环境下有大约3 000个计算任务,没有充分发挥多核CPU的优势。

还有一点就是线程安全和稳定性问题也不容忽视。
线程共享内存。
线程中的错误会影响主进程的稳定性和安全性。
最初我以为如果代码写得好的话就不会出现这个问题,但后来发现我错了。
线程之间的内存访问争用是一个常见问题。

还有另一个重要的细节。
Python 的多线程对于 IO 密集型任务表现良好,但对于 CPU 密集型任务则失败。
很多人没有注意到这一点,但我认为值得一试。

总之,当面临这些挑战时,Python 多线程的替代方案通常是使用多个进程。
每个进程都有自己的GIL,允许真正的并行执行。
同时,使用线程池或进程池也是管理线程和进程的有效方法。
因此,选择使用多线程还是多处理应该根据您独特的应用场景和任务类型。
请稍等。
另一件需要注意的事情是线程切换的开销。
这种开销变得很明显,特别是当线程数量很大时。
老实说,这很令人困惑。

Python颠覆性版本发布!去GIL,史上最快

是的,说到 Python 3 .1 4 ,这是一个非常有趣的版本。
说实话,之前在论坛上看过很多讨论,对于去掉GIL(Global Interpreter Lock)的问题,大家都有自己的看法。

首先表达一下我个人的感受。
我记得我第一次接触 Python 3 .1 4 当时我正在做一个数据分析项目,并使用了一些库,如 NumPy 和 Pandas。
上了GIL后,发现多线程比以前流畅了。
我感觉效率有了巨大的提高,尤其是在处理需要大量计算的任务时。

GIL 的主要更新是取消“一次只允许运行一个 Python 线程”的限制。
这听起来可能有点复杂,但说白了,它让Python的多线程真正并行执行,这对于CPU密集型任务特别有用。
Python 3 .1 4 支持两种构建模式:默认单线程构建和自由线程构建。

有趣的是,虽然线程构造提高了单线程速度和内存占用(大约提高了1 0%),但多线程性能提升却很显着。
我的一个老朋友,是一名机器学习工程师,使用Python 3 .1 4 来训练GIL版本的模型,效果有很大提升。

是的,吉尔前往无需任何费用。
例如,单线程性能可能会略有下降,内存使用量可能会增加。
另外,开发者在使用多线程时需要更加小心,避免引入并发bug。
社区内的反馈也褒贬不一。
一些开发人员认为这是一个革命性的版本,大大提高了多线程代码的速度。
但也有 Guido van Rossum 等持谨慎观点的人认为,去掉 GIL 的影响可能被高估了,普通项目可能会因为内存增加而获益有限,得不偿失。

对于开发者来说,选择合适的构建模式和代码适配非常重要。
如果您是寻求极致性能的开发人员。
考虑使用自由线程构建,但不要忘记测试性能和内存使用情况。
对于大多数项目,默认的单线程构建就足够了。

总的来说,Python 3 .1 4 中删除 GIL 是一个巨大的改进;但开发者在使用时需要权衡利弊,根据项目需求选择合适的方案。
这就像烹饪时选择正确的香料一样,不是吗?