python gil锁对多进程有影响吗,python gil锁面试题
什么是GIL锁?
GIL是Python解释器CPython中最流行的技术术语。意思是全局解释器锁,本质上是类似于操作系统的互斥体。每个Python线程,当在CPython解释器中执行时,将首先锁定自己的线程,以防止其他线程执行。
CPython会轮流执行Python线程。这样用户会看到线程交替执行,看似并行,实际上只有一个线程在运行。现在都是多核CPU,可以实现线程的并行运行,所以Python不用多线程。
GIL是如何工作的?
下图是GIL用Python创作的一个例子。其中,线程1、2和3被依次执行。当每个线程开始执行时,它将锁定GIL,以防止其他线程执行。类似地,每个线程执行一个段后,GIL将被释放,以允许其他线程开始使用资源。
CPython中还有一个机制,叫做check_interval,意思是CPython解释器会轮询检查线程GIL的锁。每隔一段时间,Python解释器会强制当前线程释放GIL,以便其他线程有机会执行。
如何绕过GIL
如上所述,Python不适合多线程(除非Python在未来版本中取消了GIL)。如果强行使用多线程,其运行效率仍可能低于单线程。
解决问题的一个好办法就是回避。在对程序性能要求高的情况下,我们不妨采用以下方法:
使用第三方库。很多高性能应用场景已经有大量用C实现的Python库,比如NumPy的矩阵运算,都是用C实现的,不受GIL的影响。使用Python的多进程协调。Python3.5提供了对异步的支持,3.6使用起来更方便,是个不错的选择。使用其他Python解释器,比如JPython,但是使用第三方通常比官方慢几个版本,很多第三方库都不支持。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。