Python编程提高:GIL(全局解释器锁)与线程互斥锁的理解

2018-10-3109:20:08编程语言入门到精通Comments2,102 views字数 952阅读模式

全局解释器锁简称:GIL(Global Interperter Lock)。首先需要明确一点就是,GIL并不是Python语言的特性,它是在现实Python解释器时引用的一个概念。GIL只在CPython解释器上存在。作用是保证同一时间内只有一个线程在执行。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

线程互斥锁和GIL的区别

1.线程互斥锁是Python代码层面的锁,解决Python程序中多线程共享资源的问题(线程数据共共享,当各个线程访问数据资源时会出现竞争状态,造成数据混乱);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

2.GIL是Python解释层面的锁,解决解释器中多个线程的竞争资源问题(多个子线程在系统资源竞争是,都在等待对象某个部分资源解除占用状态,结果谁也不愿意先解锁,然后互相等着,程序无法执行下去)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

GIL对程序有啥影响

1.Python中同一时刻有且只有一个线程会执行;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

2.Python中的多个线程由于GIL锁的存在无法利用多核CPU;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

3.Python中的多线程不适合计算机密集型的程序;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

4.如果程序需要大量的计算,利用多核CPU资源,可以使用多进程来解决。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

GIL 的存在使程序无法充分利用CPU进行运算,那么它真的一无是处么? 再进一步分析,程序分为两种,一种是上面提到的计算密集型程序,另一种叫作IO密集型程序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

大部分的程序在运行时,都需要大量IO操作,比如网络数据的收发,大文件的读写,这样的程序称为IO密集型程序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

IO密集型程序在运行时,需要大量的时间进行等待,那么这时如果IO操作不完成,程序就无法执行后面的操作,导致CPU空闲。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

那么 GIL 对于这种IO密集型程序会有什么影响?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

在解释器解释执行任何 Python 代码时,都需要先获得这把锁才行,在遇到 I/O 操作时会释放这把锁。如果是纯计算的程序,没有 I/O 操作,解释器会每隔 100 次操作就释放这把锁,让别的线程有机会执行,提高Python程序的执行效率。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

如何改善GIL产生的问题

因为 GIL 锁是解释器层面的锁,无法去除 GIL 锁在执行程序时带来的问题。只能去改善。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

1.更换更高版本的解释器,比如3.6,从3.2版本开始,据说Python对解释做了优化文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

2.更换解释器,比如JPython,但是由于比较小众,支持的模块较少,导致开发的效率降低文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

3.Python为了解决程序使用多核的问题,使用多进程代替多线程文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

作者:贾富程
来源:掘金文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/7588.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/7588.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定