全局解释器锁 GIL
2024-09-22 00:03:11
1、什么是GIL?
GIL本质上是互斥锁,可以将并发运行变为串行,以此来控制同一时间内共享数据只能被一个任务修改,保证时间安全
2、GIL应用场景
使用原因:Cpython解释器自带垃圾回收机制不是线程安全的
在一个python 进程内,包含了许多线程(主线程,解释器级别线程);主线程开启了许多其他线程如(线程1,线程2,线程3),解释器级别线程如垃圾回收线程,因为他们在一个进程内所以数据是共享的,如果涉及到对共同数据100的修改,线程1执行是x=100,垃圾回收执行的是回收数据100的操作,要解决这种冲突,进行加锁处理,谁拿到权限谁先执行,保证python解释器同一时间只能执行一个任务代码
3、GIL与LOCK对比
(1)GIL保护的是解释器级的数据,LOCK保护用户自己的数据,需要自定义互斥锁;
(2)GIL相当于执行权限,会在任务无法执行的情况下强行释放,自定义互斥锁即使任务无法执行也不会释放
线程py1执行流程:获取公共数据,先拿到了GIL LOCK,启动python解释器,(python中的线程即操作系统的原生线程)调用操作系统,分配cpu给线程py1;遇到IO操作,释放GIL LOCK;再拿到锁时,重复执行之前的步骤,直到结束更新共享数据池;线程Py2要操作数据申请到了GIL LOCK,启动python解释器,让操作系统分配cpu给py2,执行完后,更新共享数据池,并释放GIL LOCK;
最新文章
- jquery.nicescroll.js可全屏可改滚动条颜色的滚动条插件-推荐
- django中间件
- 简析android消息模型
- tinyhttpd-0.1.0_hacking
- 网易云课堂_程序设计入门-C语言_第三周:循环_1奇偶个数
- HDU 1862 EXCEL次序 (排序水问题)
- bzoj3702二叉树 线段树合并
- java 软件安装
- 2018.10.19浪在ACM 集训队第一次测试赛
- HTML —— 小记
- unary
- 100-days: eight
- LINUX下 USB转串口 【转】
- UI设计 - 首页(主页)的任务
- Microsoft-Excel Sheet Column Number
- python的类继承与派生
- centos7.3 防火墙设置
- XML之Schema
- 【01】Vue 之hello wolrd
- mysql启动错误1067的解决