程序 執行緒 python的GIL

2021-09-26 16:05:11 字數 1015 閱讀 6249

由於計算機資源有限,程式競爭計算機資源(程序:競爭計算機資源的基本單位,至少有乙個程序)

單核cpu只能執行乙個程式?

在不同的應用程式程序之間切換

多核(4核8核)程序排程演算法:乙個程式被掛起切換到另乙個程式

程序/執行緒 切換開銷使非常大的(cpu利用率降低,一些cpu的資源消耗到程序切換中)

執行緒:使程序的一部分

執行緒:比程序更小的單元用來管理cpu的資源,執行緒切換消耗資源比程序小

程序和執行緒分工不同,程序用來分配資源(記憶體資源等),執行緒利用cpu執行**

** -> 指令 -> cpu執行(指令操作資源)

執行緒屬於乙個程序,執行緒不被分配資源但可以訪問程序的資源

import threading, time

def worker():

print('i am thread')

t = threading.current_thread()

time.sleep(5) # 遇到阻塞則跳到下乙個執行緒

print(t.getname())

t = threading.current_thread()

print(t.getname()) # 主線程

t1 = threading.thread(target=worker())

t1.start() # 子執行緒

多執行緒更加充分的利用cpu的效能

非同步程式設計(主線程不知道子執行緒什麼時候執行完,主線程不依賴子執行緒函式的執行結果)

多執行緒同一時刻只允許乙個執行緒執行**

gil,讓python不能充分利用多核cpu的優勢

鎖:為了執行緒安全

程序管理記憶體資源,執行緒訪問程序資源(多個執行緒共享乙個程序的資源)

gil必要性:資源訪問造成,執行緒不安全(例如:變數值的改變,多執行緒操作,結果不確定)

鎖分為:細粒度鎖(程式設計師主動加鎖)粗粒度鎖(直譯器鎖gil)一定程度保證執行緒安全

python cpython(有gil鎖) jpython

python 執行緒GIL鎖

gil global interpreter lock cpython python中乙個執行緒對應於c語言中的乙個執行緒 gil使得同乙個時刻只有乙個執行緒在乙個cpu上執行位元組碼,無法將多個執行緒對映到多個cpu上執行 gil會根據執行的位元組碼行數以及時間片釋放gil,gil在遇到io的操作...

Python程序與執行緒及GIL(全域性直譯器鎖)

程式並不能單獨執行,只有將程式裝載到記憶體中,系統為它分配資源才能執行,而這種乙個程式在乙個資料集上的一次動態執行過程就稱之為程序。程式和程序的區別就在於 程式是指令的集合,它是程序執行的靜態描述文字 程序是程式的一次執行活動,屬於動態概念。程序一般由程式 資料集 程序控制塊三部分組成。有了程序為什...

Python多執行緒與GIL

gil global interpreter lock 是在實現python解析器 cpython 時所引入的乙個概念。但值得注意的是,gil並不一定是所有python編譯器均必須的,如jpython就沒有gil。gil是python為解決多執行緒之間資料完整性和狀態同步的辦法,類似於在存在乙個全域...