簡單說:執行緒的鎖機制與cpu的鎖(gil)粒度不一樣,gil並不能保證執行緒安全
單個位元組碼操作(原子操作)是執行緒安全的,非原子操作是多位元組碼操作
所以我理解的gil只是使一些簡單的原子操作變成了執行緒安全的
,而非那些原子操作的過程仍然
需要我們自己使用鎖機制進行同步
gil保證的是位元組碼同一時刻只能被乙個執行緒執行,但是同乙個操作可能對應多個位元組碼的,比如:
in [1]: import dis
in [2]: dis.dis(lambda x: x+1)
1 0 load_fast 0 (x)
3 load_const 1 (1)
6 binary_add
7 return_value
假設剛好執行到了return_value時切換到另乙個執行緒執行了相同操作中,x的值就改變了。 怎樣理解python中的GIL
一,gil的概念 python全域性直譯器鎖。二,gil產生的原因 1,guido van rossum 吉多 範羅蘇姆 建立python時就只考慮到單核cpu。2,解決多執行緒之間資料完整性和狀態同步的最簡單方法自然就是加鎖。於是有了gil這把超級大鎖。3,cpython解析只允許擁有gil全域性...
Python之GIL的理解總結
前言 並行和併發的區別,程序和執行緒,個人理解 並行 多個cpu同時執行兩個程式,兩個程式真的同時在執行。併發 兩個程式在乙個cpu上執行,通過cpu時間片排程執行,執行的很快,看起來像並行,其實是併發,具體某乙個時間點,一定只有乙個程式在執行。程序與執行緒 對於作業系統而言,乙個任務就是乙個程序,...
GIL 全域性直譯器鎖 理解
gil 鎖,全域性直譯器鎖,作用就是,限制多執行緒同時執行,保證同一時間內只有乙個執行緒在執行。執行緒非獨立的,所以同一程序裡執行緒是資料共享,當各個執行緒訪問資料資源時會出現競狀態,即資料可能會同時被多個執行緒占用,造成資料混亂,這就是執行緒的不安全。所以引進了互斥 chi 鎖,確保某段關鍵 共享...