GIL全域性鎖測試

2022-03-16 16:46:43 字數 1835 閱讀 8135

基礎知識:

python3.7預設直譯器(cpython)

cpu為四核

#

! /usr/bin/python

import

time

from threading import

thread

from multiprocessing import

process

cpu_num = 4

defmy_counter():

i =0

for _ in range(100000000):

i = i + 1

return

true

deftest_for_serial():

'''執行緒依次執行測試

'''start_time =time.time()

for tid in

range(cpu_num):

t = thread(target=my_counter)

t.start()

t.join()

end_time =time.time()

print("

執行緒依次執行耗時: {}

".format(end_time -start_time))

deftest_for_concurrent():

'''執行緒同時執行測試

'''ts =

start_time =time.time()

for tid in

range(cpu_num):

t = thread(target=my_counter)

t.start()

for t in

ts: t.join()

end_time =time.time()

print("

執行緒同時執行耗時: {}

".format(end_time -start_time))

def test_for_process(base=1):

'''程序同時執行

'''ts =

start_time =time.time()

for tid in range(cpu_num *base):

t = process(target=my_counter)

t.start()

for t in

ts: t.join()

end_time =time.time()

print("

程序同時執行耗時: {}

1. 多執行緒能避開gil鎖

2. 多執行緒同時執行跟多執行緒依次執行耗時相差不大,應該是python3.7有改進鎖釋放提高效率了。別人部落格看到py2.7下相差會有百分之三四十,我這邊測了幾回都是差不多

GIL全域性解釋鎖

gil是python直譯器 cpython 時引入的概念,在jpython pypy中沒有gil。gil並不是python的語言缺陷。gil,the global interpreter lock,直譯為 全域性解釋鎖 cpython在執行多執行緒的時候並不是執行緒安全的,所以為了程式的穩定性,加一...

GIL 全域性直譯器鎖

1 描述python中gil的概念,以及它對python多執行緒的影響?編寫乙個多執行緒抓取網頁的程式,並闡明多執行緒抓取程式是否可比單執行緒效能有提公升,並解釋原因。答 gil global interpreter lock,即全域性直譯器鎖 1 python語言和gil沒有半毛錢關係。僅僅是由於...

GIL全域性直譯器鎖

gil 啥?他是如何產生的?gil產生的背景 在cpython解釋內部執行多個執行緒的時候,每個執行緒都需要直譯器內部申請相應的全域性資源,由於c語言本身比較底層造成cpython在管理所有全域性資源的時候並不能應對所有執行緒同時的資源請求,因此為了防止資源競爭而發生錯誤,對所有執行緒申請全域性資源...