zoukankan      html  css  js  c++  java
  • GIL全局解释器锁

    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))
    举例
     
  • 相关阅读:
    最易懂的语音自动增益原理介绍
    共振峰估计基础
    语音基音周期估计基础
    语音信号临界带宽的概念解释
    语音信号的时域维纳滤波器原理简介
    几种改进的谱减算法简介
    谱减算法的缺点和过减因子、谱下限的关系
    关于语音分帧时有重叠部分的原因分析
    x264命令参数与代码中变量的对应关系
    笔记--语音信号的预加重
  • 原文地址:https://www.cnblogs.com/zhouhao123/p/11220147.html
Copyright © 2011-2022 走看看