zoukankan      html  css  js  c++  java
  • python全栈开发第36天------GIL全局解释锁、死锁现象和递归锁、信号量、Event事件、线程

    一、GIL全局解释锁

      定义:本质就是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL,同一个进程必须抢到GIL之后才能使用Cpython解释器来执行自己的代码,无法并行

      用途:因为Cpython解释器的垃圾回收机制不是线程安全的

      用法:计算密集型的使用多进程;IO密集型的使用多线程

    二、死锁现象与递归锁

      死锁:是指两个或两个以上的进程或是线程在执行过程中,因为争夺资源而造成的一种互相等待的现象

      解决方法:递归锁

    from threading import Thread,Lock,RLock
    import time

    # mutexA=Lock()
    # mutexB=Lock()
    mutexB=mutexA=RLock()


    class Mythead(Thread):
    def run(self):
    self.f1()
    self.f2()

    def f1(self):
    mutexA.acquire()
    print('%s 抢到A锁' %self.name)
    mutexB.acquire()
    print('%s 抢到B锁' %self.name)
    mutexB.release()
    mutexA.release()

    def f2(self):
    mutexB.acquire()
    print('%s 抢到了B锁' %self.name)
    time.sleep(2)
    mutexA.acquire()
    print('%s 抢到了A锁' %self.name)
    mutexA.release()
    mutexB.release()

    if __name__ == '__main__':
    for i in range(100):
    t=Mythead()
    t.start()

    三、信号量
      Semaphore管理一个内置的计数器
    四、Event事件
      当其他线程需要判断另外某个线程的状态来确定自己下一步的操作,则需要用到Event事件来解决
    五、线程Queue
      LifoQueue来堆栈,后进先出
  • 相关阅读:
    CentOS6 install Ruby 1.9.3
    php注释规范
    ecstore小记
    关于local storage 和 session storage以及cookie 区别简析
    local storage 简单应用‘’记住密码’
    点击按钮播放音频 停止后再次点击再次播放 添加背景音乐
    页面触底自动加载数据
    侧导航下载
    解决ie对于Bootstrap的兼容性问题
    js判断微信 选择浏览器打开
  • 原文地址:https://www.cnblogs.com/zhouyi0316/p/9605307.html
Copyright © 2011-2022 走看看