python 執行緒GIL鎖

2021-08-28 04:12:28 字數 808 閱讀 9566

#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 設計者為了規避類...