一、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