GIL锁
知识点
Python GIL的概念
- GIL:全局解释器,同一个进程中的每个线程在执行的过程都需要现获取GIL,保证在同一个时刻只有一个线程可以执行代码。
- python程序与GIL本身无关,仅仅是因为历史原因构建了cpython解释器导致,如果要在cpython中移除GIL,会很难。
GIL对Python的影响
- 线程释放GIL锁的情况:在IO操作等可能会引起阻塞的system call之前可以暂时释放GIL,但在执行完毕后,必须重新获取GIL python3.x使用计时器(执行时间达到阈值后,当前线程释放GIL)或者python2.x tickets计数达到100。
- 在利用cpython解释器时,使用多进程是可以利用多核的cpu资源的。或者利用其它python解释器就没有这个问题,或者可以利用第三方语言(如c)来实现多线程就可以解决该问题。
- 多线程运行时是会比单线程性能有所提升的,因为遇到IO阻塞时会自动释放GIL锁。
补充知识
c语言在linux中的编译
1
2
3
4将.c文件编译为可执行文件
gcc xxx.c
将.c文件编译为动态库文件(可被其它程序调用)
gcc xxx.c -shared -o libxxx.so在python中调用c语言程序的动态库
1
2
3
4
5
6# 导入模块
from ctypes import *
# 加载动态库
lib = cdll.LoadLibrary("./libxxx.so")
# 调用动态库中的函数信息
lib.Deadloop()
作业
- (问答)描述Python GIL的概念
- (问答)GIL对python的影响
- 现有已经写好的c语言文件:xxx.c,如何将其编译为可执行文件
- 现有已经写好的c语言文件:xxx.c,如何将其编译为动态库文件
- 在python程序中如何调用c语言动态库文件xxx.so中的方法test