全局解释锁(GIL)详细解读

我在学习 python 的时候觉得它如此简单方便,它的可升级行、易维护性、可读性等诸多特性,深深吸引着我,以至于到现在,它都是我的主力语言。当我觉得掌握了一种技能的话,我会问自己几个问题,
1、这个技能是什么东西?
2、它解决了什么问题?
3、市场上有没有同类型的东西?
4、为什么你要用它?
5、你觉得是用它和使用别的东西,有什么分别?
这几个问题怕是我自己也不好回答完全,但这正是对于你自己掌握的东西的一种理解程度的考验,我们看问题做事情不能只做表面,否则我们将会形成一种错觉,自己都会了,但是又觉得自己又不会,糊里糊涂的就这样做下去。我也是这样,知道几次跌倒了,我发现自己或许并不是什么都会,我或许处于中间状态,下面步入正题,开始谈论 python 的 GIL。

GIl 到底是个啥?

我们就用我刚才说的理论来来问一下自己那几个问题。

这个 GIL 是什么东西?

全局解释锁(GIL)是指计算机解释性语言(注意,这里指解释性语言,不单指python)中使用的一种机制,用于同步线程的执行,以便一次只能执行“一个本地线程”,使用 GIL 的解释器使用允许一次只执行一个线程,即使在多核处理器上运行也是如此,一些具有 GIL 的流行解释是CPython和Ruby MRI。

GIL 解决了什么问题?

全局解释锁可以保证同一时刻只有一个线程来运行,那为什么要这样做?同时有多个线程运行不是效率更高吗?我也是查阅了多方资料。先来回顾下并行和并发的区别。

并行: 多个 cpu 同时执行多个任务,就好像有两个程序,这两程序是真的在两个不同 cpu中被执行。

并发: cpu 交替执行多个任务,还是两个程序吗,但是只有一个 cpu 但是 cpu 会交替执行这两个程序,而不是同时执行,如果同时执行会怎么样呢?文章最后我们在来解释,继续说,交替执行的时候,由于 cpu 速度很快,使得给人的感受就是在“同时执行”一样,执行的先后取决于各个程序对于时间片资源的争夺。并行和并发同属于多任务,目的是要提高 cpu 的使用率,这里需要注意的是,一个 c pu 永远不能实现并行,即几个 c pu 不能同时运行多个程序,但是可以随机分配时间片内的程序交替执行,相当于一个人永远不能同时同时做两件事一样,我们顶多是做一会这个,在坐一会那个。

多线程不会充分调用多个 cpu 而是会像在一个 cpu 上运转。而过进程会充分调用多个 cpu 同时执行。

Guido van Rossum(吉多·范罗苏姆)创建 python 的时候只考虑了单核 cpu ,解决多线程之间数据完整性和状态同步的问题最简单的方法自然即使加锁,来保证同时一个 cpu 内只能有一个 线程来运行,于是乎便有了 GIL 这个全局解释锁,因为cpython解析只允许拥有GIL全局解析器锁才能运行程序,这样就保证了保证同一个时刻只允许一个线程可以使用cpu。,那么当时没有考虑多核的问题,后来咋不考虑呢?这是因为大量的程序开发者接受了这套机制,现在的代码量越来越多,已经不容易通过 c 代码去解决这个问题了。

市场上有没有类似 GIL 的东西?

人类世界不会平白无故的产生一种事物,所以很多事情都是可以深究其原因的,GIl 也不是平白无故出现的,GIL 深层次的问题也不是平白无故的出现的,那么对比 GIL 有无同类型的产物呢?他们之间有何区别呢?

1、 linux 内核锁

大内核锁(BKL)的设计是在kernel hacker们对多处理器的同步还没有十足把握时,引入的大粒度锁。他的设计思想是,一旦某个内核路径获取了这把锁,那么其他的所有内核路径都不能再获取到这把锁。这也和 GIL 类似,都是粗力度的锁。

为什么你要用GIL?

看完了上边的问题这个问题也就不用解答了

你觉得是用GIL和使用别的东西,有什么分别?

对比 python 的单核多线程并发,Go语言的 goroutine 是一个很好的轻量级的线程实现,由 Go 运行时(runtime)管理。Go 程序会智能地将 goroutine 中的任务合理地分配给每个 CPU。Go 程序从 main 包的 main() 函数开始,在程序启动时,Go 程序就会为 main() 函数创建一个默认的 goroutine。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值