GIL全局解释器锁

匿名 (未验证) 提交于 2019-12-02 23:49:02
GIL全局解释器锁1. 什么是GIL全局解释器锁
    GIL本质就是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL,同一进程内的多个线程    必须抢到GIL之后才能使用Cpython解释器来执行自己的代码,即同一进程下的多个线程无法实现并行    但是可以实现并发    在Cpython解释器下,如果想实现并行可以开启多个进程2. 为何要有GIL    因为Cpython解释器的垃圾回收机制不是线程安全的3. 如何用GIL    有了GIL,应该如何处理并发进程:资源单位线程:代码的运行过程互斥锁:把多个任务对共享数据的修改,由并发变成串行,牺牲效率保证数据安全
from threading import Thread  #线程 import time  def task(name):     print('%s is running' %name)     time.sleep(2)  if __name__ == '__main__':     t1=Thread(target=task,args=('线程1',))     t2=Thread(target=task,args=('线程2',))     t3=Thread(target=task,args=('线程3',))     t1.start()     t2.start()     t3.start() 结果: 线程1 is running 线程2 is running 线程3 is running
举例

计算密集型:应该使用多进程

from multiprocessing import Process from threading import Thread import os,time  def work():     res=0     for i in range(10000):         res*=i  if __name__ == '__main__':     l=[]     # print(os.cpu_count())     start=time.time()     for i in range(6):         p=Process(target=work)    #run time is 1.0090382099151611         # p=Thread(target=work)   #run time is 0.012500286102294922         l.append(p)         p.start()     for p in l:         p.join()     stop=time.time()     print('run time is %s' %(stop-start))
举例

io密集型:应该使用多线程

from multiprocessing import Process from threading import Thread import threading import os,time def work():     time.sleep(2)  if __name__ == '__main__':     l=[]     start=time.time()     for i in range(100):         p=Process(target=work) #41.31889200210571         # p=Thread(target=work) #2.0850322246551514         l.append(p)         p.start()     for p in l:         p.join()     stop=time.time()     print('run time is %s' %(stop-start))
举例

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