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;

最新文章

  1. jquery.nicescroll.js可全屏可改滚动条颜色的滚动条插件-推荐
  2. django中间件
  3. 简析android消息模型
  4. tinyhttpd-0.1.0_hacking
  5. 网易云课堂_程序设计入门-C语言_第三周:循环_1奇偶个数
  6. HDU 1862 EXCEL次序 (排序水问题)
  7. bzoj3702二叉树 线段树合并
  8. java 软件安装
  9. 2018.10.19浪在ACM 集训队第一次测试赛
  10. HTML —— 小记
  11. unary
  12. 100-days: eight
  13. LINUX下 USB转串口 【转】
  14. UI设计 - 首页(主页)的任务
  15. Microsoft-Excel Sheet Column Number
  16. python的类继承与派生
  17. centos7.3 防火墙设置
  18. XML之Schema
  19. 【01】Vue 之hello wolrd
  20. mysql启动错误1067的解决

热门文章

  1. Spring.Net 简单实例-01(IOC)
  2. MariaDB修改默认字符集
  3. jqurey实现点赞特效
  4. SRS流媒体服务器搭建+ffmpeg推流VLC取流观看
  5. (转载)Memcached和Redis简介
  6. (6).NET CORE微服务 Micro-Service ---- AOP框架
  7. Ubuntu学习
  8. TopCoder SRM500 Div1 1000 其他
  9. BZOJ3156 防御准备 动态规划 斜率优化
  10. XXX系统项目目标文档课堂讨论