多工 單 多執行緒 同步 死鎖

2021-08-16 10:30:13 字數 1554 閱讀 6470

多工簡介,同步的概念,互斥鎖

多工:

作業系統輪流讓各個任務交替執行,cpu的執行速度很快,感覺上就像所有任務都在同時執行.

真正的多工執行只能在多核cpu上實現.

併發:

併發指任務數多於cpu核數,通過作業系統分配執行.

並行:

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

執行緒:

1.使用threading模組

t = threading.tread(target=函式名, args=(引數)) # 引數要為元組型別

多執行緒併發操作比單執行緒執行操作,花費事件更少.

當呼叫start()時才會真正的建立執行緒,並開始執行.

2.主線程會等待所有的子執行緒結束後才結束.

3.執行緒執行**的封裝

為了讓每個執行緒的封裝性更完美,所以使用threading模組時,往往會定義乙個新的子類class,只要繼承threading.tread就可以了,然後重新run方法執行所需的功能.建立執行緒還是呼叫start方法.

4.多執行緒程式的執行順序是不確定的.

總結: 1)每個執行緒預設有乙個名字,儘管上面的例子中沒有指定執行緒物件的name,但是python會自動為執行緒指定乙個名字。

2)當執行緒的run()方法結束時該執行緒完成。

3)無法控制線程排程程式,但可以通過別的方式來影響執行緒排程的方式。

多執行緒共享全域性變數:

global關鍵字宣告全域性變數

如果多個執行緒同時對同乙個全域性變數操作,會出現資源競爭問題,從而資料結果會不正確.

同步:

同步就是協同步調,按預定的先後次序進行執行.

解決執行緒同時修改全域性變數的方式:

可以通過執行緒同步來進行解決.

思路如下:

1)系統呼叫t1,然後獲取到g_num的值為0,此時上一把鎖,即不允許其他執行緒操作g_num

2)t1對g_num的值進行+1

3)t1解鎖,此時g_num的值為1,其他的執行緒就可以使用g_num了,而且是g_num的值不是0而是1

4)同理其他執行緒在對g_num進行修改時,都要先上鎖,處理完後再解鎖,在上鎖的整個過程中不允許其他執行緒訪問,就保證了資料的正確性

互斥鎖:

當多個執行緒幾乎同時修改某乙個共享資料的時候,需要進行同步控制.

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

總結:

鎖的好處:

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

鎖的壞處:

1)阻止了多執行緒併發執行,包含鎖的某段**實際上只能以單執行緒模式執行,效率就大大地下降了

2)由於可以存在多個鎖,不同的執行緒持有不同的鎖,並試圖獲取對方持有的鎖時,可能會造成死鎖

避免死鎖:

1)程式設計時盡量避免(使用銀行家演算法)

2)新增超時時間等

Python 多工 執行緒同步

高階程式設計技巧 學習筆記 1.1 實現兩個執行緒一問一答 class xiaoai threading.thread def init self super init name 小艾同學 def run self print f 在 print f 你猜現在幾點了?class tianmao th...

多執行緒 同步與死鎖

多個操作在同一時間內 只能有乙個執行緒執行,其他執行緒要等此執行緒完成之後才能繼續執行。要解決資源共享的同步操作問題,可以使用同步 塊和同步方法完成。1.1 同步 塊 塊分四種 1 普通 塊 是直接定義在方法之中的。2 構造塊 是定義在類中的,優先於構造方法執行,可以重複呼叫 3 靜態塊 是使用st...

多執行緒 同步與死鎖

程序 是程式的執行過程 是乙個動態的 程序中持有資源 共享記憶體,共享檔案 和執行緒 執行緒 是系統中最小的執行單元,同一程序中有多個執行緒,執行緒共享程序的資源 多執行緒圖 執行緒的5種狀態 同步什麼時間用 資源共享時需要進行同步操作 同步的缺點 程式中過多的同步會產生死鎖 經典案例 生產者消費者...