python 关于GIL锁问题
# 单线程死循环 占有一个CPU 100%
while True:
pass
# 2个线程死循环 占用2个cpu的 50% 非正在多线程,因为存在GIL锁
import threading
# 子线程死循环
def test():
while True:
pass
t1 = threading.Thread(target=test)
t1.start()
# 主线程死循环
while True:
pass
# 2个进程死循环 占用2个cpu的 100%
import multiprocessing
# 子线程死循环
def deadloop():
while True:
pass
t1 = multiprocessing.Process(target=deadloop)
t1.start()
# 主进程程死循环
while True:
pass
计算密集型程序才需要 解决GIL锁的问题
解决GIL锁的问题之一 使用jpython等其它解释器 有问题只有cpython
loop.c文件
void DeadLoop()
{
while(1)
{
;
}
}
通过编译生成 .so文件
gcc loop.c -shared -o libdead_loop.so
解决GIL锁的问题之二 调用其它语言的函数
# 解决GIL锁的问题之二 调用其它语言的函数
from ctypes import *
from threading import Thread
# 加载动态库
lib = cdll.LoadLibrary("./libdead_loop.so")
# 创建一个子线程, 让其执行c语言编写的函数, 此函数是一个死循环
t = Thread(target=lib.DeadLoop)
t.start()
# 主线程
while True:
pass