码迷,mamicode.com
首页 > 其他好文 > 详细

关于GIL一点思考

时间:2019-09-09 23:04:48      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:多进程   核心   多个   通过   mem   核心部分   pytho   最大   erp   

什么是GIL?

GIL全称是Global Interpreter Lock,是python最常见的解释器CPython引入的一个概念。GIL是为了避免多个线程(threads)同时执行。因为CPython的内存管理并不是线程安全的,所以这个锁的存在是有必要的,短时间也是无法移除的。
GIL是一把全局排他所。毫无疑问,全局锁的存在会多线程的效率有不小影响。甚至就几乎等于Python是个单线程的程序。

影响

GIL最大的问题就是Python的多线程程序并不能利用多核CPU的优势。
GIL只会影响到那些严重依赖CPU的程序(计算型),如果你

如何避免影响

用multiprocess替代Thread

即使用多进程而不是多线程。每个进程有自己的独立的GIL,因此不会出现进程之间的GIL争抢。
缺点:线程之间共享变量比较容易,对于thread来说,申明一个global变量,用thread.Lock的context包裹住三行就搞定了。而multiprocess由于进程之间无法看到对方的数据,只能通过在主线程申明一个Queue,put再get或者用share memory的方法。

使用其他解释器

JPython和IronPython没有GIL的问题,但是比较小众。功能和性能较差,不是个好选择。

核心部分使用其他语言

如果对并行计算性能较高的程序可以考虑把核心部分写成C模块,或者索性用其他语言实现

总结,GIL在较长一段时间内将会继续存在,但是会不断对其进行改进。

关于GIL一点思考

标签:多进程   核心   多个   通过   mem   核心部分   pytho   最大   erp   

原文地址:https://www.cnblogs.com/jkhere/p/11494511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!