• 10.23GIL全局解释器锁,多线程作用,死锁,递归锁,信号量


    python解释器

    cpython

    C写的

    ppython

    python写的

    jpython

    java写的

    GIL全局解释器锁

    基于Cpython来研究全局解释器锁
    GIL是Cpython特有的
    GIL本质上是一个互斥锁
    GIL为了阻止同一个进程内多个线程同时执行一个代码
    单个进程下的多个线程无法实现并行,但能时间并发
    主要是因为cpython的内存管理不是"线程安全"的
    保证线程在执行任务时不会被垃圾回收机制回收
    GIL的存在是为了保证线程安全的
    注意:多个线程过来执行,一旦遇到IO操作,就会立马释放GIL解释器锁,交给下一个先进去的线程

    多线程的作用

    4个任务,每个任务10秒

    计算密集型

    单核

    开启进程:
    消耗资源大
    4个进程:是40秒
    开启线程:
    消耗资源院校以进程
    4个线程:是40秒

    多核

    开启进程:
    并行,执行效率高
    4个进程:是10秒
    开启线程:
    执行效率低
    4个线程:是40秒

    IO密集型

    单核

    开启进程:
    消耗资源大
    4个进程:是40秒
    开启线程:
    消耗资源院校以进程
    4个线程:是40秒

    多核

    开启进程:
    并行,执行效率低于多线程,因为遇见IO会立马切换CPU的执行权限
    4个进程:是40秒+额外开启进程消耗的时间
    开启线程:
    并发执行,执行效率高于多进程
    4个线程:是40秒

    在计算密集型的情况下

    使用多进程

    IO密集型的情况下

    使用多线程

    高效执行,多个进程内有多个IO密集型的程序

    使用多进程+多线程

    死锁现象

    A锁的钥匙在B锁内,B锁的钥匙在A锁内
    注意:锁不能乱用

    递归锁

    用于解决死锁问题

    RLock

    相当于万能锁,可以提供给多个让去使用,但只能第一个人使用的时候,会对该锁做一个引用计数,只有引用计数为0的时候,才能真正释放让另一个人去使用.

    信号量

    互斥锁:同一时间只能让一个让使用
    信号量:同一时间可以让多个让去使用

    线程Q

    线程队列
    FIFO队列:先进先出
    LIFO队列:后进先出
    优先级队列:数字1N,字母Az,数字>字母>未知

  • 相关阅读:
    elk
    js时间处理
    idea首次提交项目
    kafka集群zookeeper集群详细配置
    单节点多节点等等详细解释
    kafka原理存储
    Thread-0" kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.
    如何使用JMeter开源性能测试工具来构建Web性能测试体系
    自动化测试的理解
    VBS教程
  • 原文地址:https://www.cnblogs.com/793564949liu/p/11728530.html
Copyright © 2020-2023  润新知