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...