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锁就一直保留下来了。

  • 相关阅读:
    归并排序
    希尔排序和插入排序的关系
    相对路径与绝对路径
    httpservlet类中两个service方法
    假如生活欺骗了你
    循环队列判满和判空的两种方式
    并查集,带权,水题PKOJ1703
    字典树HDU1251
    POJ食物链,并查集,包含种类的分部
    HDU1043逆向bfs打表
  • 原文地址:https://www.cnblogs.com/zbaby/p/11815548.html
Copyright © 2011-2022 走看看