#gil global interpreter lock (cpython)
#python中乙個執行緒對應於c語言中的乙個執行緒
#gil使得同乙個時刻只有乙個執行緒在乙個cpu上執行位元組碼, 無法將多個執行緒對映到多個cpu上執行
#gil會根據執行的位元組碼行數以及時間片釋放gil,gil在遇到io的操作時候主動釋放
# import dis
# def add(a):
# a = a+1
# return a
# # print(dis.dis(add))
total = 0
defadd
():#1. dosomething1
#2. io操作
# 1. dosomething3
global total
for i in range(1000000):
total += 1
defdesc
():global total
for i in range(1000000):
total -= 1
import threading
thread1 = threading.thread(target=add)
thread2 = threading.thread(target=desc)
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print(total)
執行緒,執行緒安全與python的GIL鎖
今天看到一篇文章,講述的是幾個提公升python效能的專案 傳送門 在看的過程中,接觸到乙個名詞,乙個從學python開始就一直看到,但是從來都是一知半解的名詞,心裡不開心,必須把它搞明白,對了,這個詞就是 gil。網上搜尋了一些資料,粗淺的理解了什麼是gil,自己感覺學習的過程比較好,感覺略有收穫...
多執行緒競爭 鎖 互斥鎖 死鎖 GIL
同乙個程序裡執行緒是資料共享的,當各個執行緒訪問資料資源時會出現競爭狀態,資料幾乎同步會被多個執行緒占用,造成資料混亂。python提供的對執行緒控制的物件。鎖的好處 確保了某段關鍵 只能由乙個執行緒從頭到尾完整地執行 鎖的壞處 某個執行緒要更改共享資料時,先將其鎖定,此時資源的狀態為 鎖定 其他執...
Python全域性直譯器鎖GIL與多執行緒
python中如果是 i o密集型的操作,用多執行緒 協程asyncio 執行緒threading 如果i o操作很慢,需要很多任務 執行緒協同操作,用asyncio,如果需要有限數量的任務 執行緒,那麼使用多執行緒。如果是cpu密集型操作,用多程序 multeprocessing 設計者為了規避類...