併發程式設計3

2022-08-29 13:03:32 字數 1331 閱讀 5480

joinablequeue

在queue的功能上多加了兩個

1 task_done  告訴容器已經處理完了乙個資料

2 join  也是喲個阻塞函式,一直到佇列中的資料被處理完畢

(task_done的呼叫次數等於佇列中的資料數量)

多執行緒理論

執行緒指的是一條流水線,是**執行的總稱,也是乙個抽象概念

執行緒是cpu的最小執行單位,是具體負責執行**的

程序是乙個資源單位,其中包括了該程式執行所需的所有資源

執行緒的特點:

乙個程序至少包含乙個執行緒,是由作業系統自動建立的稱之為主線程

乙個程序中可以有任意數量的執行緒

建立執行緒的開銷對比執行緒而言要小的多

同乙個程序中的執行緒間資料共享(最主要的特點)

多執行緒兩種建立方式

第一種直接例項化thread

第二種繼承thread類,覆蓋run方法

使用的方式與程序一致

不同的是:建立執行緒的**可以寫在任何位置

程序匯入的模組 from multiprocessing import process

執行緒匯入的模組 from threading import thread

主線程任務完畢後,程序不會立即結束,會等待所有子執行緒全部執行完畢

在同一給程序中,所有執行緒都是平等的沒有父子這麼一說

多執行緒互斥鎖

執行緒安全也是通過鎖來保證,鎖的用法與程序中一模一樣

死鎖開發一些高併發程式很有可能出現執行緒/程序安全問題

解決方案只有加鎖,但是在使用鎖時,很有可能出現死鎖問題

出現死鎖問題的兩種情況

1 對同一把鎖呼叫了多次acquire導致死鎖問題

2 有多把鎖,乙個執行緒搶一把鎖,要完成任務必須同時搶到所有的鎖,將導致死鎖問題

如何避免:

1 能不加鎖就不加  2 如果一定要加,保證鎖只有一把

可重入鎖

只能防止乙個問題就是同一執行緒多次執行acquire

資訊量可以控制同一時間,有多少執行緒可以併發的訪問

多執行緒的常用屬性

thread 物件常用屬性

name 執行緒的名字

is_alive 返回執行緒是否活動

daemon 指定是否時守護執行緒

threading模組中常用資料

current_thread 獲取當前執行緒

active_count 只在執行執行緒數量

enumerate 返回所有在執行的執行緒物件

守護執行緒

守護執行緒會在主線程結束後立即結束,即使任務沒有完成

主線程會等待所有子程序全部完成後結束

守護執行緒會在所有非守護執行緒結束後結束

3 併發程式設計

程序 程序指的就是程式執行的過程,是乙個動態的概念 程式 程式就是一系列的 檔案,是乙個靜態的概念 程序也可以說成是作業系統幹活的過程,就是作業系統控制硬體來執行應用程式的過程 程序是作業系統最核心的概念,研究進行就是在研究作業系統 一 作業系統的作用 1 隱藏醜陋複雜的硬體介面,提供良好的抽象介面...

併發程式設計3 執行緒排程

方法說明 run 執行緒執行的主體 yield 放棄當前的時間片進入可執行狀態,可以被再次選中 start 執行緒進入可執行階段 sleep 阻塞一定的時間,會持有鎖 t2.join 等待t2執行緒執行結束,會持有鎖,有可能會死鎖 wait 鎖物件的方法,持有鎖物件的執行緒釋放鎖,進入阻塞佇列等待n...

java併發程式設計學習(3)

銀行排隊叫號的場景如圖所示 有乙個出票機,按順序出票。有多個櫃檯叫號。對於這樣的場景,實現可以分為2部分,出票機和櫃檯。出票機public class ticketwindow implements runnable catch interruptedexception e 新建ticketwind...