GIL锁对象(全局解释器)[面试题]

			GIL锁对象(全局解释器)[面试题]

描述Python 中GIL的概念, 以及它对python多线程的影响?编写一个多线程抓取网页的程序,并阐述多线程抓取程序是否比单线程单线程性能有提升,并解释原因。

#1.多线程
#子线程死循环
import threading

def test():
 while True:
 pass

t1 = threading.Thread(target=test)
t1.start()

#2.主线程
while True:
 pass

#3.多进程
import multiprocessing

def deadLoop():
 while True:
 pass

#子进程死循环
p1 = multiprocessing.Process(target=deadLoop)
p1.start()

由上述代码可知:多线程的并发其实并不是实现了真正意义上的并发。
GIL锁对象是指全局解释器锁。每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码。而 cpython解释器中存在一个GIL(全局解释器锁),他的作用就是保证同一时刻只有一个线程可以执行代码。

结论:
1. 在 处理像科学计算 这类需要持续使用cpu的任务的时候 单线程会比多线程快
2. 在 处理像IO操作等可能引起阻塞的这类任务的时候 多线程会比单线程

如何实现多线程的并发,即如何解决GIL(全局解释器)?
1、更换解释器 比如使用jpython(java实现的python解释器);
2、使用多进程完成多任务的处理。

猜你喜欢

转载自blog.csdn.net/qq_43552952/article/details/84769239