zoukankan      html  css  js  c++  java
  • GIL锁

    GIL锁:

      全局解释器锁。

      是指只能每次进行一个线程,线程在执行的是时候都加上了GIL锁,不能同时执行多个线程。所以使用python多线程,在同一时刻也只有一个线程在运行,因此即使在多核的情况下也只能发挥出单核的性能。

    GIL锁造成的原因:

        不是Python语言的原因,而是CPython解释器历史缘故遗留的。

    如何解决GIL锁:

          1、换解释器,不使用由C语言编的解释器即可,有许多的解释器。

          2、调用其他的语言实现多线程。

    多线程使用场景和不该使用的场景:

        虽然多线程受全局解释器锁(GIL)的影响,但是它IO密集型的时候依旧比单线程的效率高。是因为IO密集型的时候会有延迟,多线程是在不断的切换每个线程,在该线程在堵塞的时候就会切换另外一个线程执行,如此一来就会在堵塞的时间执行其他的线程。单线程在堵塞的时间完全浪费,所以多线程在IO密集型的时候还是效果很不错的。

        在计算密集型的时候就不可以使用多线程,多线程并不能发挥出电脑多核的资源,完全用一个核进行计算。因为大量计算是个没有阻塞的,程序在不断的执行,所以多线程对其毫无作用,因此多线程不试用于计算密集型的程序。计算密集型的程序需用使用进程来执行,因为进程可以使用电脑多核的资源,进而效率会比线程的效率高

     

    去掉GIL锁:

        Python的创始人是有尝试去抹掉GIL锁的,但是由于线程中的资源是共享的,所在抹去解释器的GIL锁之后还是要保证数据的安全性就必须要加上各种锁,反而使其效率变得不如没抹去GIL的效率,所以GIL锁就一直保留下来了。

  • 相关阅读:
    Python单例模式中的4种方式
    Python list,tuple,dict,set高级变量常用方法
    python如何获取多个excel单元格的值
    两种方法实现python操作日志的封装
    numpy中函数shape的用法
    python中timer定时器常用的两种实现方法
    详解Python中argpasrse模块的基本使用
    在python中列表删除和多重循环退出
    Python的驻留机制(仅对数字,字母,下划线有效)
    python实现tail -f 功能
  • 原文地址:https://www.cnblogs.com/zbaby/p/11815548.html
Copyright © 2011-2022 走看看