• 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的多线程到底有没有用
    需要看情况而定 并且肯定是有用的
    
    
    多进程+多线程配合使用
    """
  • 相关阅读:
    poj 1753 -- Flip Game
    hdu 2209 -- 翻纸牌游戏
    文件系统的挂载与卸载挂载
    我的vim配置(一)
    Poj 3687 -- Labeling Balls
    主动激发“onclick”事件;prompt
    this
    函数嵌套
    调用函数时传递的实参个数arguments.length; ,函数定义时的形参个数sum.length
    回调函数,用户定义的排序规则
  • 原文地址:https://www.cnblogs.com/wkq0220/p/11353326.html
Copyright © 2020-2023  润新知