0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

GIL锁是什么?为什么需要GIL锁呢?

冬至子 来源:BU科研通 作者:BU科研通 2023-09-20 15:44 次阅读

图片

全局解释器锁或GIL是一个互斥锁,它阻止多个本机线程同时执行Python字节码。这个锁是必需的,主要是因为CPython的内存管理不是线程安全的。(然而,由于GIL的存在,其他的特性已经发展到依赖于它所执行的保证。)

在CPython的环境下,即使在多核的情况下,同一个进程启动多个线程,只能执行一个线程。 无法利用多核的一个优势

GIL的优点:

保证Cpython解释器内存管理的线程安全

GIL的缺点:

同一进程内所有的线程同一时刻只能有一个执行。
也就是说Cpython解释器的多线程无法实现并行。

为什么需要GIL :

python中一切都是对象,Cpython中对象的回收,是通过对象的引用计数来判断,当对象的引用计数为0时,就会进行垃圾回收,自动释放内存。

但是如果多线程的情况,引用计数就变成了一个共享的变量 Cpython是当下最流行的Python的解释器,使用引用计数来管理内存,在Python中,一切都是对象,引用计数就是指向对象的指针数,当这个数字变成0,则会进行垃圾回收,自动释放内存。但是问题是Cpython是线程不安全的。

考虑下如果有两个线程A和B同时引用一个对象obj,这个时候obj的引用计数为2;A打算撤销对obj的引用,完成第一步时引用计数减去1时,这时发生了线程切换,A挂起等待,还没执行销毁对象操作。

B进入运行状态,这个时候B也对obj撤销引用,并完成引用计数减1,销毁对象,这个时候obj的引用数为0,释放内存。如果此时A重新唤醒,要继续销毁对象,可是这个时候已经没有对象了。所以为了保证不出现数据污染,才引入GIL。

CPU密集型:在高CPU利用率的代码中,此时这种同一时刻只能有一个线程访问CPU机制会响应效率,如高计算类的代码中。如真遇到这种情况,可以用多进程,不用多线程处理

IO密集型:处理文件、处理web请求、爬取网页、设备文件、读写数据、send、recv,我们遇到的基本都是IO的,很少遇到计算类的东西

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计数器
    +关注

    关注

    32

    文章

    2254

    浏览量

    94365
  • 多线程技术
    +关注

    关注

    0

    文章

    12

    浏览量

    8550
  • python
    +关注

    关注

    56

    文章

    4782

    浏览量

    84464
收藏 人收藏

    评论

    相关推荐

    特高压交流GIL输电技术研究及应用

    气体绝缘输电线路(gas-insulated transmission line,GIL)具有传输容量大、运行可靠性高、环境友好的特点,国内外尚无特高压GIL成熟产品和应用案例,亟需开展其关键技术
    发表于 12-15 14:39 1次下载
    特高压交流<b class='flag-5'>GIL</b>输电技术研究及应用

    什么是GIL?GIS与GIL的有什么区别?GIL气体绝缘输电线路教程免费下载

    GIL : Gas Insulated transmission Line 气体绝缘输电线路或 CGIT: Compressed Gas Insulated Transmission line
    发表于 09-10 08:00 44次下载
    什么是<b class='flag-5'>GIL</b>?GIS与<b class='flag-5'>GIL</b>的有什么区别?<b class='flag-5'>GIL</b>气体绝缘输电线路教程免费下载

    哪些因素影响智能价格?-坤坤智能

    哪些因素影响智能价格?-坤坤智能如今,市场上的智能价格从几百到几千的都有,为什么相差这么大?哪些因素影响智能价格
    发表于 11-21 10:04 452次阅读

    为什么智能的价格比普通机械高?-诺托智能

    为什么智能的价格比普通机械高?-诺托智能如今,智能越来越普及化,很多家庭都选择智能,但是,为什么智能
    发表于 12-03 11:44 386次阅读

    关于智能需要了解什么

    如今,智能已经成为家居必备的产品,是智能家居必不可少的代表性产物。然而,在智能市场上不要单纯地追赶智能门锁潮流,而是细心了解、寻找真正适合自己的智能产品。那么,关于智能
    发表于 03-30 15:52 389次阅读

    智能的电池怎么换_智能的市场前景

    智能区别于传统的机械,传统的机械门锁是不需要电池进行驱动,可以永久使用,不用担心电的问题,而智能门锁因为是电子控制的,很多功能都需要电的支撑,所以
    发表于 04-07 14:30 9298次阅读

    如何区分指纹门禁和指纹

    指纹门禁和指纹怎么区分?指纹门禁和指纹门锁有何区别?在很多时候,普通消费者容易将指纹门禁和指纹门锁的定义混淆,其实二者是有区别的,适用范围和需求也不一样,在选购产品时,
    发表于 06-11 14:43 4741次阅读

    如何设置指纹

    随着科技的发展,很多需要上锁的东西都变成了使用指纹。指纹的好处在于它方便,而且不容易被打开。每个人的指纹都是独一无二的,那么打开指纹的钥匙也就是独一无二的了。现在很多人都会在手机
    发表于 06-15 17:35 5242次阅读

    世界首条特高压GIL工厂首次全面“体检”,保障华东地区能源供应

    7月29日,“万里长江第一廊”——世界首条特高压GIL管廊完成工程投运以来首次全面“体检”,有力保障了今夏用电高峰期华东地区能源供应安全,更好地促进长三角地区一体化发展。
    发表于 07-31 11:03 911次阅读

    在全自动智能和半自动智能之间又该如何选择

    就目前的智能产品选择多样,对一般家庭来说,在全自动智能和半自动智能之间又该如何选择?其工作原理是什么?两者之间又各有什么优势和区别
    的头像 发表于 08-20 16:19 8842次阅读

    GIL在CPython解释器中的工作原理是什么?

    我是一个Python线程,我的工作就是解释执行程序员编写的Python代码。 之所以说是解释执行,是因为Python是高级语言,CPU那家伙不认识Python代码,需要运行的时候动态翻译成CPU指令
    的头像 发表于 03-22 10:01 1341次阅读
    <b class='flag-5'>GIL</b>在CPython解释器中的工作原理是什么?

    为什么需要分布式 基于Zookeeper安全吗

    这篇文章我想和你聊一聊,关于 Redis 分布式的「安全性」问题。 Redis 分布式的话题,很多文章已经写烂了,我为什么还要写这篇文章? 因为我发现网上 99% 的文章,并没有把这个问题真正
    的头像 发表于 08-10 18:06 5584次阅读

    Python新提案:使全局解释器成为可选项

    如果该提案通过,意味着默认情况下 CPython 不会删除或关闭 GIL,也不会让用户有选择地启用 / 删除 GIL。因为--without-gil是一个编译时标志,可以在从源代码构建 Python
    的头像 发表于 01-13 15:31 444次阅读

    自旋和互斥的区别有哪些

    自旋 自旋与互斥很相似,在访问共享资源之前对自旋进行上锁,在访问完成后释放自旋(解锁);事实上,从实现方式上来说,互斥
    的头像 发表于 07-21 11:19 9424次阅读

    互斥和自旋的实现原理

    保护共享资源不被多个线程同时访问。它的实现原理主要包括以下几个方面: 1. 的初始化 互斥锁在创建时需要进行初始化,通常包括设置的状态为“未锁定”。在某些实现中,还需要初始化
    的头像 发表于 07-10 10:07 412次阅读