Python解释器与GIL锁

一、Python解释器

python写的.py文件想要运行必须通过python解释器转化为CPU可以识别的代码(0101...)。python存在多种解释器,由不同的语言开发,常见的解释器如下:

Cpython

Cpython是官方网站推荐的解释器,它是用C语言开发的,我们从官网下载python后,命令行运行python就是启动了Cpython。

Ipython

Ipython是在Cpython基础上增加了交互功能,jupyter notebook就是使用了ipython。

PyPy

PyPy是另一个python解释器,他的目标是执行速度,他和Cpython有所不同。

Jpython

Jpython是运行在Java平台上的解释器,可以直接把python代码编译成Java字节码执行。

IroPython

IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

 二、GIL锁(全局解释器锁)

GIL:每个线程在执行的过程都要先获取GIL,保证同一时刻只有一个线程可以执行代码。

这是C语言python解释器中的一个缺点,这是一个历史遗留问题,很难改变。

使用Cpython解释器,python无法发挥多核CPU的效率。

计算密集型程序

比如计算1到1000000的立方和,这个时候用进程。

IO密集型程序

文件读写、网络收发等。存在等待、延时,可以用线程和协程。

 三、如何解决GIL问题

1. 换一个python解释器

2. 使用其他语言来写python线程的内容(比如C语言),然后使用python调用。当然也可以用其他语言,体现了python胶水语言的特性。

参考链接:

[1] https://www.liaoxuefeng.com/wiki/1016959663602400/1016966024263840

猜你喜欢

转载自www.cnblogs.com/yunxiaofei/p/11108869.html