zoukankan      html  css  js  c++  java
  • GIL全局解释器锁+GIL全局解释器锁vs互斥锁+定时器+线程queue+进程池与线程池(同步与异步)

    以多线程为例写个互斥锁

    from threading import Thread ,Lock
    import time
    mutex = Lock()

    n = 100

    def task():
    global n
    with mutex:
    temp = n
    time.sleep(0.1)
    n= temp-1


    if __name__ == '__main__':
    t_l = []
    start_time = time.time()
    for i in range(100):
    t = Thread(target=task)
    t_l.append(t)
    t.start()


    for t in t_l:
    t.join()
    stop_time = time.time()
    print(n)
    print(stop_time-start_time)

    1.GIL(这里是Cpython解释器独有的):本质就是互斥锁,程序中修改共享数据就应该用互斥锁来解决。
    互斥锁是阻止多个任务同时运行,同一进程下的多个线程只能运行一个。
    都是阻止多个并发线程同一时间只能有一个运行。
    即:有了GIL的存在,同一进程内的多个线程同一时刻只能有一个运行,意味着Cpython解释器在一个进程下的多个线程无法实现并行,,意味着无法利用多核优势
    但不影响并发的实现


    2.为何要有GIL?
    因为python解释器自带垃圾回收机制不是线程安全的
    GIL可以被比喻成执行权限,同一线程下的所有线程都想要执行,都需要先抢执行权限


    如何用?
    GIL相当于执行权限,会在任务无法执行的情况下,就强行释放

  • 相关阅读:
    游戏编程模式--原型模式
    游戏编程模式--观察者模式
    游戏编程模式--享元模式
    游戏编程模式--命令模式
    mybatis的线程安全
    开发遇到的问题
    spring的ThreadLocal解决线程安全
    i++
    jvm内存初步了解
    注解@RequestMapping,@RequestBody
  • 原文地址:https://www.cnblogs.com/zhangrenguo/p/9953077.html
Copyright © 2011-2022 走看看