python GIL :全局解释器

匿名 (未验证) 提交于 2019-12-02 22:56:40

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)

 

原文:https://www.cnblogs.com/tsgxj/p/9251777.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!