zoukankan      html  css  js  c++  java
  • GIL锁是什么鬼?

    参考链接: http://cenalulu.github.io/python/gil-in-python/

    GIL不是Python特性

    GIL是Python解释器(Cpython)时引入的概念,在JPython、PyPy中没有GIL。GIL并不是Python的语言缺陷。

    GIL定义

    GIL,the Global Interpreter Lock,直译为“全局解释锁”

    GIL存在原因

    CPython在执行多线程的时候并不是线程安全的,所以为了程序的稳定性,加一把全局解释锁,能够确保任何时候都只有一个Python线程执行。

    GIL的弊端

    • GIL对计算密集型的程序会产生影响。因为计算密集型的程序,需要占用系统资源。GIL的存在,相当于始终在进行单线程运算,这样自然就慢了。

    • IO密集型影响不大的原因在于,IO,input/output,这两个词就表明程序的瓶颈在于输入所耗费的时间,线程大部分时间在等待,所以它们是多个一起等(多线程)还是单个等(单线程)无所谓的。

      这就好比,你在公交站等公交时,你们排队等公交(单线程)还是沿着马路一字排开等(多线程)是无所谓的。公交车(即input,即输入的资源)没来,哪种方式都是瞎折腾。



    解决方案

    multiprocessing

    multiprocessing是一个多进程模块,开多个进程,每个进程都带一个GIL,就相当于多线程来用了。

    multiprocessing的弊端

    多线程与多进程一个不同点在于:

    • 多线程是共享内存的,即这些线程共用一个内存地址。好处在于便于线程间数据通信和数据同步。
    • 多进程,各个进程地址之间是独立的内存地址。这样不存内存地址之间通信就麻烦了。
      综上所述,如果是IO密集型且对数据通信有需求,使用python 的threading模块也是可以的。


  • 相关阅读:
    a链接获取方法
    调用百度地图API搜索地名和关键词
    页面定时跳转
    amazeui 上传文件
    数组删除多个元素的方法
    synology git 服务器问题处理
    公司和家里代码文件同步方案: (git和dropbox实现)
    前端项目, 每次运行都需要输入 sudo 的解决方法
    git revert 让提交不再害怕
    建立自己的键盘栈(shortcutkeyStack)
  • 原文地址:https://www.cnblogs.com/Rivend/p/12052637.html
Copyright © 2011-2022 走看看