Python如何規避全局解釋器鎖(GIL)帶來的限制
編程語言分類概念介紹(編譯型語言、解釋型語言、靜態類型語言、動態類型語言概念與區別)
https://www.cnblogs.com/zhoug2020/p/5972262.html
Python解釋器
一般使用的Python解釋器CPython:是用C語言實現Pyhon,是目前應用最廣泛的解釋器。最新的語言特性都是在這個上面先實現,基本包含了所有第三方庫支持,但是CPython有幾個缺陷,一是全局鎖使Python在多線程效能上表現不佳,二是CPython無法支持JIT(Just-in-time compliation即時編譯),導致其執行速度不及Java和Javascipt等語言。於是出現了Pypy。
Pypy:是用Python自身實現的解釋器。針對CPython的缺點進行了各方面的改良,性能得到很大的提升。最重要的一點就是Pypy集成了JIT。但是,Pypy無法支持官方的C/Python API,導致無法使用例如Numpy,Scipy等重要的第三方庫。(還有JPython,IronPython等)
全局解釋器鎖
全局解釋器鎖(Global Interpreter Lock)是Python用於同步線程的工具,使得任何時刻僅有一個線程在執行。
Python GIL被動釋放機制(搶占機制)
如果一個線程不間斷地在 Python 2 中運行100次解釋器的計步(ticks)(可以通過sys.setcheckinterval()設置計步長度),或者不間斷地在 Python 3 運行15 毫秒,那麽它便會放棄 GIL,而其他線程可以運行。
全局解釋器鎖帶來的問題
多線程Python程序無法充分利用多個CPU核心帶來的優勢。
(主要影響CPU密集型程序,I/O密集型程序使用多線程一般是明智的選擇)
Python如何規避全局解釋器鎖(GIL)帶來的限制