zoukankan      html  css  js  c++  java
  • GIL

    知识储备:

    """
    1、什么事GIL
    
      全局解释器锁,本质就是一把互斥锁,是加到解释器身上的,每一个python进程内都有这么一把锁i
    
    2、有了GIL会对单进程下的多个线程造成什么样的影响
    
      多线程要想执行自己的代码,首先需要争抢GIL,对所有待执行的线程来说,GIL就相当于执行权限
    
      同一时刻只有一个线程争抢成功,即单进程下的多线线程同一时刻只有一个在运行
    
      意味着但进程下的多线程没有并行的效果,但是有并发的效果
    
      PS:分散于不同进程内的线程不会去争抢同一把GIL,只有同一个进程的多个线程才争抢同一把GIL
    
    3、为什么要有GIL
    
      Cpython解释器的内存管理机制(垃圾回收线程)不是“线程安全”的
    
    4、GIL与自定义胡知所的异同,多个线程争抢GIL与自定义互斥锁的过程分析
    
      相同:
    
        互斥锁
      不同点:
    
        GIL是加到解释器上的,作用于全局
        自定义互斥锁作用于局部
        
        单进程内的所有线程都会去抢GIL
        单进程内的只有一部分线程会去抢自定义的互斥锁
    5、什么时候用python的多线程,是么时候用多进程,为什么?
    
      单进程下的多线线程是无法并行,无法并行意味着不能利用多核优势
    
      CPU是执行计算工作,多个CPU意味提升计算性能
    
      CPU是无法做I/O操作,意味着多个CPU在I/O操作面前提升的性能效益微乎其微
    
      
    
      当程序是I/O密集型情况下,多核对性能的提升微不足道,此时可以使用python的多线程
    
      当程序是计算密集型情况下,一定要用上多核优势,此时可以使用python多进程
    
        
    
    ** 多个线程争抢GIL与自定义互斥锁的过程分析 **
        多个线程先争抢GIL锁,
    
    """

     

  • 相关阅读:
    mysql8搭建innodb_cluster集群
    centos7安装(二进制包)mysql8
    apollo-配置管理中心-安装
    gitlab-源代码仓库
    Gitlab管理用户、组、权限(一)
    Gitlab基本管理(二)
    Gitlab基本管理<一>
    Gitlab在centos7上手工安装
    在kubernetes运行一个容器案例
    在linux通过kubeadm搭建kubernetes群集
  • 原文地址:https://www.cnblogs.com/limengjie0104/p/8961825.html
Copyright © 2011-2022 走看看