对GIL问题的见解

今天没学新知识,只好把之前模糊的GIL问题来总结一下。(有不同见解,还请指出。自己还不是很深理解)

GIL的由来:

先说个小故事

(据我所知python最初还是一个默默无闻的脚本语言)
直到有天...
python:  ‘我不甘心,我要翻身上位’
C(老大哥) :‘小伙子,慢慢来’
java:  ‘一个连真正编程语言都不算,还想上位'
(之后,他开始了翻身之旅,默默跟着C学习改进,渐渐地开始有了
编程语言的形状。)
为了利用多核,Python开始支持多线程。
而解决多线程之间数据完整性和状态同步的最简单方法自然就是加锁。 
于是自然而然就有了有了GIL这把超级大锁。

GIL的概念:

什么是GIL(全局解释器锁) :由于python解释器设计中加入了解释器锁,导致python解释器同一时刻只能解释执行一个线程,大大降低了线程的执行效率。

GIL的问题

声明一下Python语言 和GIL儿没有半毛钱关系。仅仅是由于历史原因在Cpython虚拟机(解释器) ,难以移除GIL。

GIL本就是历史遗留的问题,也曾有人想修改GIL问题,可是发现GIL早已贯穿了整个语言。修改这个问题已经不亚于重新编写一个语言。其次,C 扩展时,这些很大程度上都是依赖 GIL 提供的解决方案,推倒重来或者删除也是不现实的。

导致后果:  因为遇到阻塞时线程就会让出解释器,去解释其他线程。所以python多线程只有在执行
多阻塞高延迟IO时才可以提升程序效率。
(在无阻塞状态下,多线程和单进程执行效率几乎差不多,甚至还不如单进程效率高)

任何事物都有其优缺,即使其缺点再多,也应该能找到其优点。

全局解释锁每次只能一个线程获得cpu的使用权:为了线程安全,也就是为了解决多线程之间的数据完整性和状态同步而加的锁,因为我们知道线程之间的数据是共享的。(这也算是其缺点中的一处优点吧,hhh)

避免发生GIL问题办法:(感觉也等于没说…)

  • 尽力使用进程完成无阻塞并发行为
  • 不使用C作为解释器

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值