python 全域性翻譯鎖(gil global interpreter lock)
為了實現在多核環境下的執行時資料的一致性,python採用加鎖的思想來實現這種同步和一致性,這把鎖就是gil。這造成了一定量的效能損失,使用鎖的原因是因為python直譯器內部是執行緒不安全的。
另外一點,首先需要明確的一點是 gil 並不是python的特性,它是在實現python解析器(cpython)時所引入的乙個概念。就好比c++是一套語言(語法)標準,但是可以用不同的編譯器來編譯成可執行**。有名的編譯器例如gcc,intel c++,visual c++等。python也一樣,同樣一段**可以通過cpython,pypy,psyco等不同的python執行環境來執行。像其中的jpython就沒有gil。然而因為cpython是大部分環境下預設的python執行環境。所以在很多人的概念裡cpython就是python,也就想當然的把 gil 歸結為python語言的缺陷。所以這裡要先明確一點:gil並不是python的特性,python完全可以不依賴於gil
python的多執行緒雖然是真正的多執行緒,並非虛擬出來的多執行緒,但是由於gil的存在導致了python在多執行緒執行程式的時候,有可能會比單執行緒執行還要慢,但是可以採用多程序的方式來執行多工,因為多程序的時候每個程序都有乙個gil,互相不影響。
但是至於python的多執行緒有沒有意義是需要看任務型別的,通常情況下我們的任務可以分成io密集型任務和計算密集型任務,如果是計算密集型任務,就需要利用多核多執行緒來實現併發,提公升效能,這種情況下,可能python的多執行緒就不能很好的利用多核,從而不能提公升效能,但是如果是io密集型任務,cpu的使用本身就不高,此時python的多執行緒就能很好的提高cpu的利用率,因為io的時候,cpu也是閒著。
Python效能分析與優化,GIL 學習筆記
cpython直譯器記憶體管理並不是是執行緒安全的 保護多執行緒情況下對python物件的訪問 cpython使用簡單的鎖機制避免了多個執行緒同時執行位元組碼同一時間只有乙個執行緒執行位元組碼 cpu密集程式 大量時間花在計算 難以利用多核優勢 io期間會釋放gil,對io密集程式 大量時間花在網路...
Python學習筆記12 GIL(全域性直譯器鎖)
每個執行緒在執行的過程都需要先獲取gil,保證同一時刻只有乙個執行緒可以執行 這個問題只出現在使用cpython直譯器的時候,同時也是只出現在使用多執行緒的時候 在使用執行緒的時候會避免多執行緒共享全域性變數帶來全域性變數混亂的問題,我們引入了互斥鎖 使用互斥鎖解決 中的資源競爭問題時,當乙個執行緒...
GIL全域性直譯器鎖 學習筆記
gil的全稱是 global interpreter lock,意思就是全域性直譯器鎖,這個gil並不是python的特性,他是只在cpython直譯器裡引入的乙個概念,而在其他的語言編寫的直譯器裡就沒有這個gil例如 jython,pypy。為解決執行緒之間資料的一致性和狀態同步,設計了gil全域...