• python GIL :全局解释器


    cpython 解释器中存在一个GIL(全局解释器锁),无论多少个线程、多少颗cpu

    他的作用就是保证同一时刻只有一个线程可以执行代码,因此造成了我们使用多线程的时候无法实现并行。

    因为有GIL的存在、所以同一时刻只能有一个线程被CPU执行

     任务:IO 密集型:可以采用多线程(多进程+协成)

               计算密集型:python不适用

    (1)IO 密集型、CPU会是实现自动切换 提高工作效率

    def ListenMusic(name):
        print("beging listening to %s,%s" %(name,time.ctime()))
        time.sleep(5)
        print("end listening %s" % time.ctime())
    def Recordlog(name):
        print("beging recoding to %s,%s" %(name,time.ctime()))
        time.sleep(5)
        print("end recoding %s" % time.ctime())
    if __name__ == '__main__':
        threads=[]
        t1=threading.Thread(target=ListenMusic,args=("凤凰传奇",))
        t2=threading.Thread(target=Recordlog,args=("python多线程",))
        threads.append(t1)
        threads.append(t2)
        for t in threads:
            t.start()

    (2) 计算密集型 cpu 一直处于工作状态、没有io流的切换、不适用多进程

    import threading,time
    def add():
        s=0
        for i in range(100000990):
            s +=i
        print("累加的结果是:",s)
    def mul():
        s1=1
        for i in range(1,10000):
            s1 *= i
        print("累乘的结果是:",s1)
    if __name__ == '__main__':
        start= time.time()
        L = []
        t1=threading.Thread(target=add)
        t2=threading.Thread(target=mul)
    
        L.append(t1)
        L.append(t2)
        for t in L:
            t.start()
        for t in L:
            t.join()
        print("总共花费时间",time.time()-start)
  • 相关阅读:
    函数(方法
    变量
    常量
    文档注释与多行注释的区别
    标识符
    [置顶] WebService学习总结(3)——使用java JDK开发WebService
    WebService学习总结(2)——WebService是什么?
    [置顶] WebService学习总结(1)——WebService相关概念
    [置顶] WebService学习总结(1)——WebService相关概念
    Java基础学习总结(38)——Lombok的使用和原理
  • 原文地址:https://www.cnblogs.com/tsgxj/p/9251777.html
Copyright © 2020-2023  润新知