• GIL锁


    GIL锁:

      全局解释器锁。

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

    GIL锁造成的原因:

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

    如何解决GIL锁:

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

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

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

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

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

     

    去掉GIL锁:

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

  • 相关阅读:
    关于Spring和Struts2的整合
    有关Transaction not successfully started问题解决办法
    两种页面跳转
    jdbc连接mysql
    change和modify
    Navicat Premium 15连接Oracle时提示oracle library is not loaded的解决方案
    Oracle创建本地数据库实例及配置监听
    下载Visual Studio 2019离线安装包
    简单的数据库
    未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序
  • 原文地址:https://www.cnblogs.com/zbaby/p/11815548.html
Copyright © 2020-2023  润新知