Python多线程(一):GIL

Python多线程(一):GIL

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

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

猜你喜欢

转载自blog.csdn.net/lzn1210899799/article/details/103622870
今日推荐