GIL用C语言解决
执行一个单线程死循环程序,单核cpu占用直接100%
while True: pass
执行一个双线程的死循环程序,cpu同样占用100%
import threading #子线程死循环 def test(): while True: pass t1=threading.Thread(target=test) t1.start() #主线程死循环 while True: pass
我们把cpu换成双核之后再次执行双线程死循环程序,发现每个cpu各占50%,两个加起来才是100%
我们在执行双进程死循环程序,发现两个cpu占用都达到了100%
import multiprocessing def deadLoop(): while True: pass #子进程死循环 p1=multiprocessing.Process(target=deadLoop) p1.start() #主进程死循环 deadLoop()
得出一个结论,python执行多任务,线程没有进程高,因为有GIL锁,同一时刻只有一个线程会被调用,单核没有区别,多核有明显区别
c语言的应用
test.c文件,代码如下
gcc test.c在当前目录生成一个a.out文件,./a.out在当前目录执行a.out文件,打印出c代码的结果
新建一个文件写如下代码,相当于python的while True:pass,分号相当于python中的pass,文件以.c结尾,我这里命名为loop.c
把c语言文件编译成一个动态库的命令(linux平台下)
gcc xxx.c -shared -o libxxxx.so
gcc loop.c -shared -o libdeadloop.so
在当前目录生成一个libdeadloop.so文件
main.py,在加载动态库里填写刚才libdeadloop.so文件的路径
执行main文件,成功多线程占用多个cpu100%