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,数字>字母>未知

  • 相关阅读:
    利用freopen()函数和fc命令简化程序调试
    A Guide to the Multiboot Process
    略谈cpu架构种类
    RHEL与Centos
    九度 1470 调整方阵
    九度 1481 Is It A Tree?
    九度 1548 平面上的点(技巧题)
    九度 1547 出入栈(递推DP)
    2014年王道论坛研究生机试练习赛(一) set 1 GrassLand密码
    13年10月 月赛第一场 set 4 迷宫问题
  • 原文地址:https://www.cnblogs.com/793564949liu/p/11728530.html
Copyright © 2011-2022 走看看