多工 執行緒部分概念

2021-08-21 01:21:46 字數 1373 閱讀 3951

多工-執行緒

cpu每個核每次都只能執行乙個任務

併發:指的是任務數多餘cpu核數,通過作業系統的各種任務排程演算法,實現用多個任務「一起」執行(實際上總有一些任務不在執行,因為切換任務的速度相當快,看上去一起執行而已) 

並行:指的是任務數小於等於cpu核數,即任務真的是一起執行的 

執行緒就是在程式執行過程中,執行程式**的乙個分支,每個執行的程式至少都有乙個執行緒 

執行緒類thread引數說明 

thread([group [, target [, name [, args [, kwargs]]]]]) 

group: 執行緒組,目前只能使用none 

target: 執行的目標任務名 

args: 以元組的方式給執行任務傳參 

kwargs: 以字典方式給執行任務傳參 

name: 執行緒名,一般不用設定 

執行緒之間執行時無序的。 

主線程會等待所有的子執行緒結束後才結束,如果需要可以設定守護主線程(daemon=true) 多執行緒共享全域性變數,很方便在多個執行緒間共享資料 多執行緒同時對全域性變數運算元據發生了錯誤 

執行緒等待(join)多個執行緒同時對同乙個全域性變數進行操作,會有可能出現資源競爭資料錯誤的問題 執行緒同步方式可以解決資源競爭資料錯誤問題,但是這樣有多工變成了單任務。  

互斥鎖:對共享資料進行鎖定,保證同一時刻只能有乙個執行緒去操作。 搶到鎖的執行緒先執行,沒有搶到鎖的執行緒需要等待,等鎖用完後需要釋放,然後其它等待的執行緒再去搶這個鎖,那個執行緒搶到那個執行緒再執行。 具體那個執行緒搶到這個鎖我們決定不了,是由cpu排程決定的。 

互斥鎖為資源引入乙個狀態:鎖定/非鎖定 

某個執行緒要更改共享資料時,先將其鎖定,此時資源的狀態為「鎖定」,其他執行緒不能更改;直到該執行緒釋放資源,將資源的狀態變成「非鎖定」,其他的執行緒才能再次鎖定該資源。互斥鎖保證了每次只有乙個執行緒進行寫入操作,從而保證了多執行緒情況下資料的正確性。  

當乙個執行緒呼叫鎖的

acquire()方法獲得鎖時,鎖就進入「locked」狀態。 每次只有乙個執行緒可以獲得鎖。如果此時另乙個執行緒試圖獲得這個鎖,該執行緒就會變為「blocked」狀態,稱為「阻塞」,直到擁有鎖的執行緒呼叫鎖的

release()方法釋放鎖之後,鎖進入「unlocked」狀態。執行緒排程程式從處於同步阻塞狀態的執行緒中選擇乙個來獲得鎖,並使得該執行緒進入執行(running)狀態。  

鎖的好處: 確保了某段關鍵**只能由乙個執行緒從頭到尾完整地執行 

鎖的壞處: 多執行緒執行變成了包含鎖的某段**實際上只能以單執行緒模式執行,效率就大大地下降了 鎖使用不好就容易出現死鎖情況

多工 執行緒

建立函式 建立執行緒物件,並制定函式 開啟執行緒 import threading import time defwork1 1.定義函式 for i in range 5 print 正在掃地 i time.sleep 1 defmain 測試執行緒的基本使用 2.建立執行緒物件 t1 threa...

多工 執行緒

簡單地說,就是作業系統可以同時執行多個任務。實現多工有多種方式,執行緒 程序 協程。可以簡單理解為同一程序中有多個計數器,每個執行緒的執行時間不確定,而每個程序的時間片相等,執行緒是作業系統排程執行的最小單位.import threadingt1 threading.thread target fu...

多工 執行緒

什麼叫 多工 呢?簡單地說,就是作業系統可以同時執行多個任務。執行緒 1.使用threading模組 import threading defsing pass defdance pass defmain t1 threading.thread target sing t2 threading.th...