zoukankan      html  css  js  c++  java
  • Python的GIL

    What全局解释器锁

    • (英语:Global Interpreter Lock,缩写GIL),是计算机程序设计语言解释器用于同步线程的一种机制,它使得任何时刻仅有一个线程在执行。即便在多核心处理器上,使用 GIL 的解释器也只允许同一时间执行一个线程

      Where GIL作用

    • 开发主要使用 GIL 的解释器CPython,CPython的线程是操作系统的原生线程
    • 一个Python解释器进程内有一个主线程,以及多个用户程序的执行线程
    • 即便使用多核心CPU平台,由于GIL的存在,也将禁止多线程的并行执行

      When 释放GIL锁

    • 当一个线程遇到I/O任务时,且CPU空闲时,将释放GIL。
    • 在单核CPU上,计算密集型(CPU-bound)的线程在执行大约100次解释器的计步(ticks)时,将释放GIL。可以通过sys.setcheckinterval()设置计步长度。

      Difference互斥锁和GIL锁

    • GIL锁: 保证同一时刻只有一个线程占用cpu,多线程的竞争GIL锁会无序执行
    • 互斥锁:保证多线程在修改共享数据时有序执行,避免数据混乱

      GIL优化

    • 使用新版python解释器,Python 3.2开始使用新的GIL。在当前线程保持这个锁,且其他线程请求这个锁时,当前线程就会在5毫秒后被强制释放该锁。
    • 创建独立的进程来实现并行化,Python 2.6引进了多进程包multiprocessing。
    • IO密集型操作时用多线程、协程
    • 计算密集型时用进程
  • 相关阅读:
    102/107. Binary Tree Level Order Traversal/II
    110. Balanced Binary Tree
    SQL SERVER select,update,delete使用表别名
    C# 有哪些集合
    C# 流总结
    How ASP.NET MVC Works ? (Artech)
    c#扩展方法
    使用缓存的九大误区
    9中浏览器端缓存
    理解AppDomain和AppPool
  • 原文地址:https://www.cnblogs.com/justblue/p/12997328.html
Copyright © 2011-2022 走看看