去掉雀斑方法 为什么python的GIL问题一直让人诟病,python社区却不解决?
为什么python的GIL问题一直让人诟病,python社区却不解决?
吉尔,这把大锁,今天仍然存在。这是有道理的。首先,我们知道Python是一种解释性语言,代码执行是在解释器中执行的。解释性语言不能实现真正的多线程并发是一个常见的问题。这是先天的。多个线程共享主进程资源。如果线程没有被锁定,线程是并发的,并且多个线程修改共享数据,就会导致数据混淆,这是不可靠的。因为解释器不知道在哪里修改代码中的共享数据,所以它直接锁定线程。解释器一次只允许运行一个线程。
当然,您可能会说,我只要求解释器锁定要修改的共享数据,这样多线程就可以真正并行了?事实上,一个大老板在国外做这件事已经很久了。测试结果表明,执行效率不如直接锁定线程。到目前为止,python开发团队还没有针对这个问题提出更好的解决方案。这是解释性语言的通病。另外,这个问题很难解决。
虽然Gil大锁的存在影响了多线程,不能实现真正的并发,但我们可以用多进程来解决。
Python不能利用多核的问题以后能被解决吗?
首先,纠正你在问题中所说的话。并不是Python不能使用多核,而是多核的利用效率很低。
其次,要回答这个问题,您需要理解一个概念-全局解释器锁(GIL)。
看一篇关于Python Gil的文章。
综上所述,CPU的大规模电路设计已基本达到物理意义的末端,各厂商已开始转向多核进一步提高性能。为了充分利用多核、多线程的优势,同时也为了保证线程间的数据完整性和状态同步,python采用了最简单的锁方式(因此python的Gil是设计之初的懒惰造成的!)。Python库的开发人员接受了这个设置,也就是说,默认的Python是线程安全的,所以他们开始严重依赖这个特性,而不考虑额外的内存锁和同步操作。然而,Gil的设计有时显得笨拙和低效。此时,由于内建图书馆和第三方图书馆对Gil形成了牢不可破的依赖,Gil的改革难度加大。因此,目前的情况是Python在多核CPU上的多线程只对Io密集型计算有积极的影响;当至少有一个CPU密集型线程时,由于Gil的存在,多线程的效率会大大降低。尽管python社区正在不断努力改进这一点,但我担心它不会在短时间内改变,因此如果您想避免Gil,可以使用多处理器或期货模块或python解析器。
所以,不管Python的官方解释器将来在这个问题上是否有任何改进,现在您都可以有一些解决方案了。
您可以使用一些没有Gil的Python解析器,例如jpython、ironpython等
希望我的答案能帮助您。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。