首页 > 编程语言 > 详细

并发编程(五)——GIL全局解释器锁、死锁现象与递归锁、信号量、Event事件、线程queue

时间:2018-09-07 15:44:26      阅读:221      评论:0      收藏:0      [点我收藏+]

 

一、GIL全局解释器锁

1、什么是全局解释器锁

GIL本质就是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL,同一进程内的多个线程,必须抢到GIL之后才能使用Cpython解释器来执行自己的代码,即同一进程下的多个线程无法实现并行,但是可以实现并发。

#1 所有数据都是共享的,这其中,代码作为一种数据也是被所有线程共享的(test.py的所有代码以及Cpython解释器的所有代码)#2 所有线程的任务,都需要将任务的代码当做参数传给解释器的代码去执行,即所有的线程要想运行自己的任务,首先需要解决的是能够访问到解释器的代码。

例如下面多个线程的执行过程:

多个线程先访问到解释器的代码,即拿到执行权限,然后将target的代码交给解释器的代码去执行

解释器的代码是所有线程共享的,所以垃圾回收线程也可能访问到解释器的代码而去执行,这就导致了一个问题:对于同一个数据100,可能线程1执行x=100的同时,而垃圾回收执行的是回收100的操作,解决这种问题没有什么高明的方法,就是加锁处理,如下图的GIL,保证python解释器同一时间只能执行一个任务的代码

技术分享图片

2、为什么要用GIL

因为CPython解释器的垃圾回收机制不是线程安全的

二、GIL与LOCK

(1)GIL是保护解释器级别的锁,使利用CPython解释器时并发使用

(2)LOCK是自定义的锁,用来保证多线程/进程对同一个数据进行修改时的数据安全,使修改数据时串行

 技术分享图片

 

并发编程(五)——GIL全局解释器锁、死锁现象与递归锁、信号量、Event事件、线程queue

原文:https://www.cnblogs.com/linagcheng/p/9604897.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!