python3 - 全局解释器锁(GIL)

目录

定义:

系统层面的线程处理:

未加GIL锁存在的安全隐患(线程安全):

GIL总结:

GIL下的多进程和多线程

 - 多线程、多进程效率测试

 - 计算密集型:多进程效率高

- I/O密集型:多线程效率高

GIL和Lock(即全局解释器锁和本地锁)


定义:

 In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple
native threads from executing Python bytecodes at once. This lock is necessary mainly
because CPython’s memory management is not thread-safe. (However, since the GIL
exists, other features have grown to depend on the guarantees that it enforces.)
  在CPython中,全局解释器锁(GIL),本质是一把互斥锁。用于防止本地线程,多次调用执行Python字节码。
这把锁存在的必要,是因为CPython的内存管理不是线程安全的。(然而,自从GIL存在,其他功能已经发展到依赖于它所执行的保证。

系统层面的线程处理:

  1. 系统开启多线程
  2. 线程编译代码,查找语法错误
  3. 调用解释器外的GIL锁
  4. 抢到GIL锁的线程,调用解释器执行程序代码
  5. 结束代码执行,释放GIL锁

 

未加GIL锁存在的安全隐患(线程安全):

对于同一个数据,线程1的处理是使用数据计算,垃圾回收线程的处理是进行回收。因为进行并发执行,存在恰好,线程1在处理数据前,进行了IO操作导致被垃圾回收线程夺取了解释器执行权,则等线程1再次获取权限执行的时候,数据已经被回收。

原因:1.相同进程内的线程数据共享 2.当CPU处理资源遇到IO操作等会进行权限切换

 

GIL总结:

  • GIL本质是一把互斥锁,相当于使用Cpython解释器的权限,默认每一个进程内都存在一把GIL。
  • 同一进程内的多个
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值