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%

转载于:https://www.cnblogs.com/z-x-y/p/10111088.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值