[英]Python multithreading and Global Interpreter Lock
我最近遇到了Python中存在的GIL,根據該GIL,一次只能執行一個線程,多線程無法利用所有內核。
現在在我的一個項目中,我使用多線程和許多鎖和信號量所以在這里我的問題是,如果我不使用鎖和信號量,我可以實現相同的目的嗎? 即如果我從我的項目中刪除並發邏輯。
編輯:我想知道的是,如果我刪除並發邏輯是否可以獲得相同的功能,我知道什么是GIL並且它阻止線程使用所有核心並且一次只運行一個線程。
全局解釋器鎖確保只有一個線程一次執行字節代碼 。 執行可以隨時中斷。
考慮這個簡單的函數,它可能用於將相關值原子地存儲到實例x
上的屬性
def f(x, a, b):
x.a, x.b = a, b
這是它反匯編成字節碼
0 LOAD_FAST 1 (a)
3 LOAD_FAST 2 (b)
6 ROT_TWO
7 LOAD_FAST 0 (x)
10 STORE_ATTR 0 (a)
13 LOAD_FAST 0 (x)
16 STORE_ATTR 1 (b)
19 LOAD_CONST 0 (None)
22 RETURN_VALUE
假設x
不受mutex
保護。 然后任何線程中執行f(x, 1, 2)
可以很容易地存儲之間被中斷a
(在10
),並存儲b
(在16
)。 那個中斷線程現在會看到x
處於不一致狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.