关于python全局性解释锁(GIL)
来源:互联网 发布:淘宝旅行 编辑:程序博客网 时间:2024/06/09 13:51
那我们简单了解下python和其它语言的一些差别:
像C++这样的语言是编译型语言,所谓编译型语言,是指程序输入到编译器,编译器再根据语言的语法进行解析,然后翻译成语言独立的机器码,最终链接成具有高度优化的机器码的可执行程序。编译器之所以可以深层次的对代码进行优化,是因为它可以看到整个程序(或者一大块独立的部分)。这使得它可以对不同的语言指令之间的交互进行推理,从而给出更有效的优化手段。
与此相反,Python是解释型语言。程序被输入到解释器来运行。解释器在程序执行之前对其并不了解;它所知道的只是Python的规则,以及在执行过程中怎样去动态的应用这些规则。它也有一些优化,但是这基本上只是另一个级别的优化。由于解释器没法很好的对程序进行推导,Python的大部分优化其实是解释器自身的优化。
现在我们来看一下问题的症结所在。要想利用多核系统,Python必须支持多线程运行。作为解释型语言,Python的解释器必须做到既安全又高效。我们都知道多线程编程会遇到的问题,解释器要留意的是避免在不同的线程操作内部共享的数据,同时它还要保证在管理用户线程时保证总是有最大化的计算资源。
那么,不同线程同时访问时,数据的保护机制是怎样的呢?答案是解释器全局锁。从名字上看能告诉我们很多东西,很显然,这是一个加在解释器上的全局(从解释器的角度看)锁(从互斥或者类似角度看)。这种方式当然很安全,但是它有一层隐含的意思(Python初学者需要了解这个):对于任何Python程序,不管有多少的处理器,任何时候都总是只有一个线程在执行。
”为什么我全新的多线程Python程序运行得比其只有一个线程的时候还要慢?“许多人在问这个问题时还是非常犯晕的,因为显然一个具有两个线程的程序要比其只有一个线程时要快(假设该程序确实是可并行的)。事实上,这个问题被问得如此频繁以至于Python的专家们精心制作了一个标准答案:”不要使用多线程,请使用多进程”。
所以,对于计算密集型的,我还是建议不要使用python的多线程而是使用多进程方式,而对于IO密集型的,还是劝你使用多进程方式,因为使用多线程方式出了问题,最后都不知道问题出在了哪里,这是多么让人沮丧的一件事情!
- 关于python全局性解释锁(GIL)
- 对于python全局性解释锁(GIL)的一些理解
- python全局解释器锁(GIL)
- Python全局解释器锁(Global Interperter Lock, GIL)
- python 什么是全局解释器锁GIL
- python基础-GIL全局解释器锁
- 【python】关于python的全局解释锁GIL及线程问题
- 初识全局解释器锁(GIL)
- 全局解释器锁(GIL)Cpython
- GIL全局解释器锁(转)
- GIL解释器锁
- Python 中的 GIL(Global Interpreter Lock) 全局解释器锁是什么?
- Python高级特性:全局解释器锁GIL基本概念
- Python 多线程 多进程 全局解释器锁GIL join
- GIL 全局解释器锁
- python GIL 全局锁
- python下GIL锁
- 理解python GIL 全局锁
- caj格式转换成pdf
- linux c socket之多进程任务
- asi详解
- 在程序中指定Spark和Hadoop的用户
- Effective C++笔记
- 关于python全局性解释锁(GIL)
- Oracle 跨表分区查询
- tabBarController的外观的设置
- 单例模式
- JAVA学习.JAVA集合类型Map.HashMap&TreeMap
- 7-1-3 分数拆分
- linux后台运行命令
- uboot分析第一阶段学习笔记
- Accelerated C++ Exercise 4-3