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来堆栈,后进先出
  • 相关阅读:
    物理CPU,物理核,逻辑CPU,虚拟CPU(vCPU)区别 (转)
    JVM学习一:常用JVM配置参数
    docker架构
    Linux查看服务器配置
    redis清缓存
    httpclient源码分析之 PoolingHttpClientConnectionManager 获取连接 (转)
    CentOs7.6配置邮件服务并发送邮件
    linux之dmesg命令
    docker部署springboot项目
    如何查看文件是dos格式还是unix格式的?
  • 原文地址:https://www.cnblogs.com/zhouyi0316/p/9605307.html
Copyright © 2011-2022 走看看