• GIL全局解释器锁


    """
    In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple
    native threads from executing Python bytecodes at once. This lock is necessary mainly
    because CPython’s memory management is not thread-safe.
    """
    """
    ps:python解释器有很多种 最常见的就是Cpython解释器
    GIL本质也是一把互斥锁:将并发变成串行牺牲效率保证数据的安全
    用来阻止同一个进程下的多个线程的同时执行(同一个进程内多个线程无法实现并行但是可以实现并发)
    python的多线程没法利用多核优势 是不是就是没有用了?

    GIL的存在是因为CPython解释器的内存管理不是线程安全的

    垃圾回收机制
    1.引用计数
    2.标记清除
    3.分代回收


    研究python的多线程是否有用需要分情况讨论
    四个任务 计算密集型的 10s
    单核情况下
    开线程更省资源
    多核情况下
    开进程 10s
    开线程 40s

    四个任务 IO密集型的
    单核情况下
    开线程更节省资源
    多核情况下
    开线程更节省资源

    # 计算密集型
    from multiprocessing import Process
    from threading import Thread
    import os,time
    def work():
    res=0
    for i in range(100000000):
    res*=i
    
    
    if __name__ == '__main__':
    l=[]
    print(os.cpu_count()) # 本机为6核
    start=time.time()
    for i in range(6):
    # p=Process(target=work) #耗时 4.732933044433594
    p=Thread(target=work) #耗时 22.83087730407715
    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=[]
    print(os.cpu_count()) #本机为6核
    start=time.time()
    for i in range(4000):
    p=Process(target=work) #耗时9.001083612442017s多,大部分时间耗费在创建进程上
    # p=Thread(target=work) #耗时2.051966667175293s多
    l.append(p)
    p.start()
    for p in l:
    p.join()
    stop=time.time()
    print('run time is %s' %(stop-start))
    
    """
    python的多线程到底有没有用
    需要看情况而定 并且肯定是有用的
    
    
    多进程+多线程配合使用
    """
  • 相关阅读:
    linux下python3环境安装(源码编译的方式安装)
    windows下docker安装(windows上安装docker比较鸡肋不推荐,还是建议在linux等系统上安装)
    序列化器嵌套的使用
    采用自定义模型字段代替序列化器嵌套的使用来返回我们想要的数据
    xadmin后台的安装及配置使用
    ORACLE检查找出损坏索引(Corrupt Indexes)的方法详解
    OGG相关操作
    ESXi挂载NFS共享存储
    第4步:创建RAC共享磁盘组
    Zabbix Server 配置微信报警
  • 原文地址:https://www.cnblogs.com/wkq0220/p/11353326.html
Copyright © 2020-2023  润新知