首先要明白什麼是gil鎖,gil鎖是python直譯器中保證在乙個程序中只要乙個執行緒在執行的鎖,它保障了整個python執行只有乙個執行緒,即使你開了多執行緒任務,它只能是併發而不是並行,而為什麼有了這個保障只有乙個執行緒執行的鎖之後還要有互斥鎖呢, 是因為在python的多執行緒任務中,多個執行緒是會對執行的條件進行爭奪的,爭奪執行的機會,如:
import threading
import time
num =
0defa(
):global num
for i in
range
(1000000):
num +=
1defb(
):global num
for i in
range
(1000000):
num +=
2t1 = threading.thread(target=a)
t2 = threading.thread(target=b)
t1.start(
)t2.start(
)time.sleep(2)
print
(num)
import threading
import time
num =
0# 建立乙個互斥鎖,預設是沒有上鎖的
mutex = threading.lock(
)defa(
):global num
for i in
range
(1000000):
mutex.acquire(
) num +=
1 mutex.release(
)defb(
):global num
for i in
range
(1000000):
mutex.acquire(
) num +=
2 mutex.release(
)t1 = threading.thread(target=a)
t2 = threading.thread(target=b)
t1.start(
)t2.start(
)time.sleep(2)
print
(num)
python GIL全域性直譯器鎖
什麼是gil python 的執行由python 虛擬機器 也叫直譯器主迴圈,cpython版本 來控制,python 在設計之初就考慮到要在直譯器的主迴圈中,同時只有乙個執行緒在執行,即在任意時刻,只有乙個執行緒在直譯器中執行。對python 虛擬機器的訪問由全域性直譯器鎖 gil 來控制,正是這...
python GIL 全域性直譯器鎖
在vmware虛擬軟體中將ubuntu設定為單核cpu 主線程死迴圈,佔滿cpu while true pass在vmware虛擬軟體中將ubuntu設定為雙核cpu import threading 子執行緒死迴圈 deftest while true pass t1 threading.thre...
python GIL(全域性直譯器鎖)
cpython直譯器中存在乙個gil 全域性直譯器鎖 他的作用就是保證同一時刻只有乙個執行緒可以執行 因此造成了我們使用多執行緒的時候無法實現並行 每個執行緒在執行的過程都需要先獲取gil,保證同一時刻只有乙個執行緒可以執行 執行緒釋放gil鎖的情況 在io操作等可能會引起阻塞的system cal...