谈下python的gil_如果面试被问python的GIL是怎么一回事,你该这样回答

如果面试时被问及python的GIL,那么你应当从以下2个方面回答

什么是GIL

对多线程的影响

1. 什么是GIL

GIL,即全局解释器锁 ,一个被广泛吐槽的技术,即便python3.9已经到来,这个GIL依然存在,而且似乎将继续存在。

为了解决多线程之间数据完整性和状态同步的问题,引入了GIL, 它可以保证多个原生线程不会并发执行 Python 字节码。

对于GIL的理解,有一点我们必须严肃的弄清楚,GIL并不是python的特性,而是实现Python解析器(CPython,我们平时默认下载安装使用的解释器)时所引入的一个概念,这个就好比C++是一套语言标准,但可以用 GCC,INTEL C++,Visual C++ 等编译器来编译,编译出来的可执行程序也就不一样。你可以使用 CPython,PyPy , JPython 来执行python的代码,CPython里有GIL,而JPython 就没有。

Python 的维护者们不是没考虑过将GIL移除,可是已经有太多的库依赖这个特性,积重难返。

2. 对多线程的影响

多线程原本是为了更好的利用CPU的多核资源,但是由于GIL的存在,使得同一个时刻,只能有一个python的线程在运行,显然,这是对资源的无耻浪费。

因此,你无法将python的多线程作为提升程序性能的一种手段,对于CPU密集型任务,请使用多进程。虽然如此,python的多线程也并非如大家所吐槽的那样鸡肋,对于I/O密集型任务,python多线程仍然有用武之地。

当一个线程I/O等待时,会释放GIL,这样其他线程就可以获得GIL来执行自己的任务,这就是你编写多线程爬虫加快爬取速度的技术依据。

3. 总结

最后做如下总结,面试的时候按照以下要点回答

GIL是全局解释器锁,以保证多个原生线程不会并发执行 Python 字节码,解决多线程之间数据完整性和状态同步的问题

GIL并不是python的特性,而是实现Python解析器时所引入的一个概念,我们默认下载使用的CPython有GIL,而JPython就没有

同一个时刻,只能有一个线程在运行,GIL导致不能有效利用CPU的多核

对于CPU密集型任务,使用多进程,对于I/O密集型任务,可以考虑使用多线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值