zoukankan      html  css  js  c++  java
  • GIL锁

    GIL

    在非python环境中,单核情况下,同时只能有一个任务执行。多核时可以支持多个线程同时执行。但是在python中,无论有多少核,同时只能执行一个线程。究其原因,这就是由于GIL的存在导致的。

    GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定。某个线程想要执行,必须先拿到GIL,我们可以把GIL看作是“通行证”,并且在一个python进程中,GIL只有一个。拿不到通行证的线程,就不允许进入CPU执行。GIL只在cpython中才有,因为cpython调用的是c语言的原生线程,所以他不能直接操作cpu,只能利用GIL保证同一时间只能有一个线程拿到数据。而在pypy和jpython中是没有GIL的。

    Python多线程的工作过程:

    python在使用多线程的时候,调用的是c语言的原生线程。

      1. 拿到公共数据
      2. 申请gil
      3. python解释器调用os原生线程
      4. os操作cpu执行运算
      5. 当该线程执行时间到后,无论运算是否已经执行完,gil都被要求释放
      6. 进而由其他进程重复上面的过程
      7. 等其他进程执行完后,又会切换到之前的线程(从他记录的上下文继续执行)
        整个过程是每个线程执行自己的运算,当执行时间到就进行切换(context switch)
  • 相关阅读:
    [sql查询] 重复数据只取一条
    SSIS,参数坑
    数据仓库之建立多维数据库
    数据仓库之SSIS开发
    开发规范
    页面以base64输出图片
    内嵌iframe
    T-Sql编程基础
    MVC3.0----整理之一
    原生JS 表单提交验证器
  • 原文地址:https://www.cnblogs.com/Nolover/p/11113642.html
Copyright © 2011-2022 走看看