Python不能利用多核的问题以后能被解决吗?
我是米小乐小米,你的问题我来回答。
首先,更正一下你的问题中的说法,python并不是不能利用多核,而是,多核的利用效率很低。
其次,要回答这个问题,首先你要了解一个概念——全局解释器锁(GIL)。
转一篇关于Python GIL的文章。
归纳一下,CPU的大规模电路设计基本已经到了物理意义的尽头,所有厂商们都开始转向多核以进一步提高性能。Python为了能利用多核多线程的的优势,但又要保证线程之间数据完整性和状态同步,就采用了最简单的加锁的方式(所以说Python的GIL是设计之初一时偷懒造成的!)。Python库的开发者们接受了这个设定,即默认Python是thread-safe,所以开始大量依赖这个特性,无需在实现时考虑额外的内存锁和同步操作。但是GIL的设计有时会显得笨拙低效,但是此时由于内置库和第三方库已经对GIL形成了牢不可破的依赖,想改革GIL反而变得困难了(晕!)。所以目前的现状就是,Python的多线程在多核CPU上,只对于IO密集型计算产生正面效果;而当有至少有一个CPU密集型线程存在,那么多线程效率会由于GIL而大幅下降。虽然Python社区也在不断为此努力改进,但恐怕短时间内不会有改变,所以想规避GIL的,可以使用多进程的multiprocessing或concurrent.futures模块,或者换个Python的解析器。
所以说,不管python的官方解释器在将来对这个问题有没有什么改进,现在你就可以有一些解决的办法。
可以使用一些没有GIL的Python的解析器有:JPython,IronPython等。
希望我的回答能够帮到你。
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有