簡體   English   中英

Python多線程和全局解釋器鎖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM