Python多线程(一):GIL

Python多线程(一):GIL

现在在学习Python,多线程编程,巩固一下该知识点

  • GIL是 Global Interpreter Lock,即全称是全局解释锁的缩写,保证了同一时刻只有一个线程在cpu上执行字节码,它无法将多个线程映射到多个CPU上.这是**CPython解释器的缺陷,**由于Cpython是大部分环境下默认的执行环境,而很多苦都是基于CPython写的,所以很多人将GIL归结为python的问题
  • GIL被设计用来保护线程安全,有多线程共享全局资源,如果不能很好的进行线程同步,多线程非常容易使数据资源发生错误,实际上即使有了GIL也也无法完全解决这个问题,因为GIL也会根据某个条件释放锁,这时该线程还未执行完毕,另一个线程就已经开始执行,依然很容易是数据资源发生错误
  • 当程序开始运行,就产生了一个进程,而GIL就是进程中的一个全局解释锁,多个线程可以同时去争夺这把锁,谁抢到了,谁就去执行,没抢到的就需要等待. 当线程执行过程中达到某些条件(如:IO操作,耗时操作,字节码或时间片**)**时,GIL便会将锁释放,其他正在等待的线程在继续抢夺这把锁,由于线程是共享全局变量,所以在对数据进行操作时,极有可能对数据进行破坏,使数据发生错误,这个时候解决方法就是使用线程同步,比如使用互斥锁来确保数据的准确
  • 互斥锁:使用互斥锁的目的就是在执行某段关键性的代码时,只能由一个线程从头到尾完整地去执行,但是缺点是影响了代码的执行效率,多任务变成了单任务.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值