Python與全域性直譯器鎖
全域性直譯器鎖(Global Interpreter Lock,簡稱CI.)是計算機程式設計語言直譯器用於同步執行緒的工具,保證任何時刻僅有一個執行緒在執行
首先要申明的是,全域性直譯器鎖並不是Python語言的特性,全域性直譯器鎖是為了實現Pythoo直譯器(主要是CPython,最流行的Python直譯器)而引人的概念,並不是所有Python直譯器都有全域性直譯器鎖。Jython和lronPython沒有全域性直譯器鎖,可以完全利用多處理器系統。PyPy和CPython都有全域性直譯器鎖。
CPython的執行緒是作業系統的原生執行緒,完全由作業系統排程執行緒的執行。一個CPython直譯器程式內有一個主執行緒以及多個使用者程式的執行執行緒。即使使用多核心CPU平臺,由於全域性直譯器鎖的存在,也將禁止多執行緒的並行執行,這樣會損失許多多執行緒的效能。
在CPython中,全域性直譯器鎖是一個互斥鎖,用於保護對Python物件的訪問,防止多條執行緒同時執行Python位元組碼。這種鎖是必要的,主要是因為CPython的記憶體管理不是執行緒安全的。
在多執行緒環境中,CPython虛擬機器按以下方式執行:
(1)設定全域性直譯器鎖。
(2)切換到一個執行緒中去執行。
(3)執行:
①指定數量的位元組碼指令;
②執行緒主動讓出控制[可以呼叫time.sleep(0)]
(4)把執行緒設定為睡眠狀態。
(5)解鎖全域性直譯器鎖。
(6)再次重複以上所有步驟。
在呼叫外部程式碼(如C/C++擴充套件函式)的時候,全域性直譯器鎖將會被鎖定,直到這個函式結束為止(因為在這期間沒有Python的位元組碼被執行,所以不會做執行緒切換)。
相關文章
- Python GIL(全域性直譯器鎖)Python
- 什麼是Python全域性直譯器鎖(GIL)?全域性直譯器鎖的好處!Python
- python之GIL全域性直譯器鎖,自定義互斥鎖,死鎖與遞迴鎖Python遞迴
- Python培訓教程:什麼是Python全域性直譯器鎖(GIL)?Python
- Python提高:關於GIL(全域性直譯器鎖)與執行緒互斥鎖的理解Python執行緒
- Python 新提案:“廢除”全域性直譯器鎖 GIL | CPython 直譯器或許會變得更快Python
- python直譯器在哪Python
- 全域性鎖、表鎖、行鎖
- 全域性鎖和表鎖
- Python3 直譯器Python
- VScode和python直譯器VSCodePython
- Python直譯器和IPythonPython
- MySQL 全域性鎖和表鎖MySql
- MySQL全域性鎖、表鎖以及行鎖MySql
- Python直譯器有幾種Python
- python直譯器的安裝Python
- Python直譯器分類有哪些?Python
- MySQL鎖問題分析-全域性讀鎖MySql
- MySQL 全域性表和表鎖MySql
- MySQL學習之全域性鎖和表鎖MySql
- Python教程分享:Python直譯器分類及版本Python
- Mac 中 Sublime 配置 Python3 直譯器MacPython
- Ipython 直譯器Python
- 常見的Python五大直譯器!Python
- 直譯器模式(Interpreter)模式
- python理論知識及python直譯器和pycharm安裝PythonPyCharm
- 前端與編譯原理——用JS寫一個JS直譯器前端編譯原理JS
- 前端與編譯原理——用 JS 寫一個 JS 直譯器前端編譯原理JS
- [譯] 通過 SSH 遠端使用 Python 直譯器來執行 FlaskPythonFlask
- Seata 全域性鎖等待超時 問題排查
- 你是否真的瞭解全域性解析鎖(GIL)
- 【工具推薦】5款超好用的python直譯器!Python
- 「python入門:」python的環境搭配和安裝python的直譯器Python
- 淺談彙編器、編譯器和直譯器編譯
- Python IDE和直譯器有什麼區別?Python入門教程PythonIDE
- 什麼是Python直譯器?和Python IDE有什麼區別?PythonIDE
- 24_直譯器模式模式
- Mac 中 Sublime 主題及 Python3 直譯器配置MacPython