全局解释器锁 GIL

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;

 

posted @ 2018-07-16 12:41  朝朝哥  阅读(170)  评论(0编辑  收藏  举报