GIL不是Python特性,是CPython解释器特性,因为CPython有垃圾回收机制。

GIL 本质是互斥锁,保护解释器安全。

保证线程安全,垃圾回收线程不会和其他线程一起运行。

多个线程不能实现真正并行,因为解释器GIL锁的原因(同一时间解释器只执行一个线程),但是,线程A取得GIL锁后可能因为IO原因block住,此时该线程会释放GIL锁,给其他线程B使用。

但如果A有个自己的锁,虽然其他线程抢到了GIL锁,但其他线程还是要等A用完自己的锁才能执行。

对计算来说,CPU越多越好,但对IO阻塞型操作,CPU再多也没用。

对于纯计算任务,多线程并无卵用,宜开多进程。但对于IO密集型操作,宜开多线程。

开多个进程,GIL就不起作用,才能实现真正多核。

CPython里的GIL的更多相关文章

  1. CPython中的GIL

    GIL:全局解释器锁(cpython中) GIL产生的背景,由于C语言底层原因,CPpython中多线程运行,每个线程都需要申请全局资源,但是Cpython并不能应对所有线程同时的资源请求,为防止发生 ...

  2. 进程,线程,GIL,Python多线程,生产者消费者模型都是什么鬼

    1. 操作系统基本知识,进程,线程 CPU是计算机的核心,承担了所有的计算任务: 操作系统是计算机的管理者,它负责任务的调度.资源的分配和管理,统领整个计算机硬件:那么操作系统是如何进行任务调度的呢? ...

  3. 多线程、互斥锁、异步、GIL

    多线程-threading python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便被使用 from threading imp ...

  4. 004_浅析Python的GIL和线程安全

    在这里我们将介绍Python的GIL和线程安全,希望大家能从中理解Python里的GIL,以及GIL的前世今生. 对于Python的GIL和线程安全很多人不是很了解,通过本文,希望能让大家对Pytho ...

  5. 什么是python的全局解释锁(GIL)

    GIL解决了Python中的什么问题? 为什么选取GIL作为解决方案? 对多线程Python程序的影响 为什么GIL还没有被删除? 为什么在Python 3 中GIL没有被移除? 如何处理Python ...

  6. python 线程,GIL 和 ctypes(转)

    原文:http://zhuoqiang.me/python-thread-gil-and-ctypes.html GIL 与 Python 线程的纠葛 GIL 是什么东西?它对我们的 python 程 ...

  7. python 多线程与GIL

    GIL 与 Python 线程的纠葛 GIL 是什么?它对 python 程序会产生怎样的影响?我们先来看一个问题.运行下面这段 python 代码,CPU 占用率是多少? # 请勿在工作中模仿,危险 ...

  8. (转)GIL 与 Python 线程的纠葛

    原文地址:http://zhuoqiang.me/python-thread-gil-and-ctypes.html 作者:Qiang GIL 与 Python 线程的纠葛 GIL 是什么?它对 py ...

  9. 线程之 CPthon中的GIL与Lock的分析与解决办法

    Cpython 中的GIL锁介绍 1. 前戏 In CPython, the global interpreter lock, or GIL, is a mutex that prevents mul ...

随机推荐

  1. 升级OpenSSL修复高危漏洞Heartbleed

    升级OpenSSL修复高危漏洞Heartbleed 背景:          OpenSSL全称为Secure Socket Layer.是Netscape所研发.利用数据加密(Encryption) ...

  2. Django1.11.4中文文档

    Django管理站点¶ 自动管理界面是Django最强大的部分之一.它从您的模型中读取元数据,以提供一个快速,以模型为中心的界面,让受信任的用户可以管理您网站上的内容.管理员建议的使用仅限于组织的内部 ...

  3. kubernetes集群管理命令(二)

    系列目录 上一节我们介绍了一些基本的命令,这一节我们介绍一些更为复杂的命令. pod排序 使用kubectl get pod获取pod资源默认是以名称排序的,有些时候我们可能希望按其它顺序排序.比如说 ...

  4. 查看客户端java日志

    通过 Java 控制面板启用 Java 控制台 Windows 8 使用搜索来查找控制面板 按 Windows 徽标键 + W 以打开搜索框来搜索设置,或者将鼠标指针拖动到屏幕的右下角,然后单击搜索图 ...

  5. sql server t-sql脚本转成oracle plsql

    将一份SQL SERVER数据库生成的T-SQL脚本,转成ORACLE的PL/SQL,其复杂繁琐程度,远远出乎我的意料. 这份SQL SERVER脚本,里面有表,有视图,还有存储过程,以及一些自定义函 ...

  6. LeastRecentlyUsed

    LeastRecentlyUsed Operating Systems http://www.cs.jhu.edu/~yairamir/cs418/os6/sld001.htm Cache repla ...

  7. java的多生产者多消费者例子

    import java.util.concurrent.locks.*; public class Test9 { public static void main(String[] args) { / ...

  8. 简单监控网站访问是否正常的shell脚本,邮件报警。网站恢复后继续运行。

    #!/bin/bash # 使用curl检查网页是否可以正常访问,如果无法访问则发邮件. SITE=crm.bjzgjh.com PROT=80 URL="http://$SITE:$PRO ...

  9. 20170306 处理adobe flash player报错

    网页总是弹出Adobe Flash Player弹窗报错怎么办?打开网页时经常被Adobe Flash Player报错提示框困扰. 其实是因为系统安装了Debug版本的Flash Player,可是 ...

  10. appium(5)-Appium capabilities

    Appium Capabilities Appium server capabilities Capability Description Values automationName Which au ...