Python中的GIL锁
在Python中,可以通过多进程、多线程和多协程来实现多任务。
在多线程的实现过程中,为了避免出现资源竞争问题,可以使用互斥锁来使线程同步(按顺序)执行。
但是,其实Python的CPython(C语言实现的)解释器上有一把GIL锁,也就是说Python的程序是处于一个解释器锁的环境中的。
一、GIL介绍
GIL (Global Interperter Lock) 称作全局解释器锁。
GIL并不是Python语言的特性,它是在实现Python解释器时引用的一个概念。GIL只在CPython解释器上存在。
不过,在Python的解释器中,使用最多的都是CPython解释器,所以我们不可避免的会遇到GIL。
在使用互斥锁解决代码中的资源竞争问题时,当一个线程执行时,会将全局共享的资源上锁,当线程执行完成后,将锁解开,释放资源,其他线程才能够使用。
GIL的作用与互斥锁的作用相似,是为了解决解释器中多个线程资源竞争的问题。
二、互斥锁和GIL的区别
互斥锁是运用在一个py文件中的,也就是在一个应用程序中,是代码层面的锁。
其实,Python解释器也是一个应用程序。只是说这个应用程序不是我们实现的,我们自己的python程序都要运行在解释器之上,这个应用程序被用来帮我们运行我们自己的程序。
线程互斥锁是Python代码层面的锁,解决我们自己写的Python程序中多线程共享资源的问题。
GIL是Python解释器层面的锁,解决解释器中多个线程的竞争资源问题。
三、GIL对程序的影响
1.Python中的多线程被称为“伪多线程”,因为无论如何,都逃不过GI