zoukankan      html  css  js  c++  java
  • 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,数字>字母>未知

  • 相关阅读:
    Vim编辑器-Basic Visual Mode
    Vim编辑器-Windows
    Vim编辑器-Searching
    Vim编辑器-Text Blocks and Multiple Files
    Vim编辑器-Editing a Little Faster
    Vim编辑器-Basic Editing
    Android12系统源码分析:NativeTombstoneManager
    为什么色彩管理很重要?
    使用chrome调试代码时引入jquery
    抖音、微信超火中国红头像制作
  • 原文地址:https://www.cnblogs.com/793564949liu/p/11728530.html
Copyright © 2011-2022 走看看