實用 python中GIL全域性直譯器鎖

2021-09-25 02:27:23 字數 1109 閱讀 3443

單執行緒:

import datetime

def calc():

sum = 0

for _ in range(100000000):

sum += 1

start = datetime.datetime.now()

calc()

calc()

calc()

calc()

calc()

delta = (datetime.datetime.now() - start).total_seconds()

print(delta)

執行結果:(只有乙個cpu核心使用率在100%左右)

多執行緒:

import datetime

import threading

def calc():

sum = 0

for _ in range(100000000):

sum += 1

start = datetime.datetime.now()

lst =

for _ in range(5):

t = threading.thread(target=calc)

t.start()

for t in lst:

t.join()

delta = (datetime.datetime.now() - start).total_seconds()

print(delta)

執行結果:(4個cpu核心使用率平均在30%,總使用率在100%左右)

總結:可以看出在cpython直譯器gil全域性鎖的作用下,執行時間都是在43秒左右並沒有提高執行效率,可見python的多執行緒是失效的。

Python中GIL全域性直譯器鎖的理解

gil的全稱是 global interpreter lock,意思就是全域性直譯器鎖,gil並不是python的特性,只在cpython直譯器裡引入的乙個概念,而在其他的語言編寫的直譯器裡就沒有這個gil例如 jpthon import threading 子執行緒死迴圈 def test whi...

Python的GIL全域性直譯器鎖

概念保證同一時間僅有乙個執行緒對資源有操作許可權 在乙個程序內,同一時刻只能有乙個執行緒執行 python多執行緒中gil鎖只是在cpu操作時 如 計算 才是序列的,其他都是並行的,所以比序列快很多 為什麼會有gil 為了利用多核,python開始支援多執行緒。而解決多執行緒之間資料完整性和狀態同步...

python全域性直譯器鎖 GIL 的問題

gil即全域性直譯器鎖,是屬於直譯器層面的互斥鎖,確切的說是cpython直譯器內部的一把鎖。gil是為了鎖定整個直譯器內部的全域性資源,每個執行緒想要執行首先獲取gil,而gil本身又是一把互斥鎖,造成所有執行緒只能乙個乙個併發交替的執行。注意多個python程序 多個gil鎖 gil產生的背景 ...