zoukankan      html  css  js  c++  java
  • 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%

  • 相关阅读:
    c++ 用宏代替常用的函数
    爬取网易云音乐(包括歌词和评论)
    三种常见的单例模式
    函数式编程filter和map的区别
    四种常见排序算法(快速,冒泡,插入,选择排序)
    6.微信撤回消息的获取
    5.微信拜年短信自动回复
    4.深拷贝和浅拷贝
    3.迭代器以及迭代器的作用
    2.生成器计算出斐波那契数列
  • 原文地址:https://www.cnblogs.com/z-x-y/p/10111088.html
Copyright © 2011-2022 走看看