为什么python的多线程不靠谱?
那我们简单了解下python和其它语言的一些差别:

像C++这样的语言是编译型语言,所谓编译型语言,是指程序输入到编译器,编译器再根据语言的语法进行解析,然后翻译成语言独立的机器码,最终链接成具有高度优化的机器码的可执行程序。编译器之所以可以深层次的对代码进行优化,是因为它可以看到整个程序(或者一大块独立的部分)。这使得它可以对不同的语言指令之间的交互进行推理,从而给出更有效的优化手段。

与此相反,Python是解释型语言。程序被输入到解释器来运行。解释器在程序执行之前对其并不了解;它所知道的只是Python的规则,以及在执行过程中怎样去动态的应用这些规则。它也有一些优化,但是这基本上只是另一个级别的优化。由于解释器没法很好的对程序进行推导,Python的大部分优化其实是解释器自身的优化。

现在我们来看一下问题的症结所在。要想利用多核系统,Python必须支持多线程运行。作为解释型语言,Python的解释器必须做到既安全又高效。我们都知道多线程编程会遇到的问题,解释器要留意的是避免在不同的线程操作内部共享的数据,同时它还要保证在管理用户线程时保证总是有最大化的计算资源。

那么,不同线程同时访问时,数据的保护机制是怎样的呢?答案是解释器全局锁。从名字上看能告诉我们很多东西,很显然,这是一个加在解释器上的全局(从解释器的角度看)锁(从互斥或者类似角度看)。这种方式当然很安全,但是它有一层隐含的意思(Python初学者需要了解这个):对于任何Python程序,不管有多少的处理器,任何时候都总是只有一个线程在执行。

”为什么我全新的多线程Python程序运行得比其只有一个线程的时候还要慢?“许多人在问这个问题时还是非常犯晕的,因为显然一个具有两个线程的程序要比其只有一个线程时要快(假设该程序确实是可并行的)。事实上,这个问题被问得如此频繁以至于Python的专家们精心制作了一个标准答案:”不要使用多线程,请使用多进程”。

所以,对于计算密集型的,我还是建议不要使用python的多线程而是使用多进程方式,而对于IO密集型的,还是劝你使用多进程方式,因为使用多线程方式出了问题,最后都不知道问题出在了哪里,这是多么让人沮丧的一件事情!

关于python全局性解释锁(GIL)相关推荐

  1. 深入理解Python中的全局解释锁GIL

    深入理解Python中的全局解释锁GIL 转自:https://zhuanlan.zhihu.com/p/75780308 注:本文为蜗牛学院资深讲师卿淳俊老师原创,首发自公众号https://mp. ...

  2. Python培训教程:什么是Python全局解释器锁(GIL)?

    本期Python培训教程小编为大家带来的是关于"什么是Python全局解释器锁(GIL)?"的问题,全局解释器锁是计算机程序设计语言解释器用于同步线程的工具,使得在同一进程内任何时 ...

  3. python全局解释锁_Python GIL 全局解释性锁介绍

    什么是GIL GIL (Global Interpreter Lock),全局解释性锁,它上锁的对象是解释器,而Python代码的运行需要解释器进行解释成字节码并提供虚拟机运行,这么大粒度的锁意味着, ...

  4. Python全局解释器锁GIL与多线程

    Python中如果是 I/O密集型的操作,用多线程(协程Asyncio.线程Threading),如果I/O操作很慢,需要很多任务/线程协同操作,用Asyncio,如果需要有限数量的任务/线程,那么使 ...

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

    什么是python的全局解释锁(GIL) 我们所说的Python全局解释锁(GIL)简单来说就是一个互斥体(或者说锁),这样的机制只允许一个线程来控制Python解释器. 这就意味着在任何一个时间点只 ...

  6. Python 并发系列 1 —— GIL

    目录 一.Python 全局解释锁(GIL)是啥? 1.1.GIL 解决了 Python 什么问题 1.2.为什么选择了 GIL 这个解决方案 1.3.对 Python 多线程的影响 1.4.为什么 ...

  7. python全栈开发第36天------GIL全局解释锁、死锁现象和递归锁、信号量、Event事件、线程...

    一.GIL全局解释锁 定义:本质就是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL,同一个进程必须抢到GIL之后才能使用Cpython解释器来执行自己的代码,无法并行 用途:因为Cpytho ...

  8. 问:为什么python中有了全局解释器锁GIL,还要有互斥锁?

    首先我们在进行对比之前,我们要知道什么是全局解释器锁,和什么是互斥锁,他们分别是用来做什么的才能解决这个问题. 首先介绍全局解释解释器锁GIL,Python代码的执行由Python 虚拟机(也叫解释器 ...

  9. Python进阶并发基础--线程,全局解释器锁GIL由来,如何更好的利用Python线程,

    全局解释器锁GIL 官方对于线程的介绍: 在 CPython 中,由于存在全局解释器锁,同一时刻只有一个线程可以执行 Python代码(虽然某些性能导向的库可能会去除此限制).如果你想让你的应用更好地 ...

最新文章

  1. 基于SSM实现社区医院管理系统
  2. 新后缀勒索病毒.phobos 解密成功 sql数据恢复
  3. 【视频】如何正确焊接贴片、直插元件?
  4. oracle bbed 使用,Oracle BBED使用 四步快速启动Oracle BBED
  5. 未能连接到许可证服务器 发生错误 -96,ug启动许可证错误怎么办 UG软件启动许可证错误96解决方法...
  6. oracle一些基本命令
  7. 使用markdown编辑器(自用,没内容。。)
  8. 数字后端基本概念介绍——Routing Blockage
  9. c语言实验作业,C语言实验报告experience_c语言实验报告结果分析
  10. 一位仁兄对于项目管理的精辟见解
  11. safari java插件故障_Safari Flash插件故障怎么办-Safari Flash插件故障解决方法 - 河东软件园...
  12. QQ快捷登录提示:禁止开发商强制用户重新注册或绑定其他帐号
  13. proe安装后 显示服务器未连接,proe许可证服务器主机名
  14. And and Pair
  15. 各大android应用商店的展示权重 安卓应用商店关键词+下载量+评价+其他这几项占的权重(仅供参考)
  16. Dependency annotations:
  17. 计算机专业生自荐信范文,计算机专业实习生自荐信范文
  18. 玻璃厂CCD视觉设备APS系统数据采集对接格式规范
  19. VisualGDB 5.6 R8 Crack-new-10-01
  20. IE阻止了此网站安装ActiveX控件

热门文章

  1. [转载] 蝴蝶上如何做种候选及发布
  2. linux 编辑如何退出命令模式,linux退出编辑模式的命令
  3. 陳三甲网络笔记:赚钱越来越难了,请摆正赚钱姿势!
  4. Web应用程序和Web网站
  5. ZMIN XII条码机怎么设置流水号
  6. elasticsearch6.6文档翻译-查询语句-查询上下文和过滤上下文
  7. win10笔记本电源的高性能找不到
  8. 计算机四级嵌入式考试—操作系统卷(1)总结
  9. 实验名称: 类的构造函数、析构函数和友员成员应用
  10. 基础理论—需求定律与供给定律分析…