上篇博文中,我們介紹了thread和threadpool:
多執行緒非同步程式設計示例和實踐-thread和threadpool
本文中我們繼續,說一下tpl(task parallel library, 簡稱tpl)。
在實際的開發中,使用執行緒池相當複雜,執行緒的異常捕獲、傳遞以及編排這些問題實現起來都很複雜。
從 .net framework 4 開始,tpl 是編寫多執行緒**和並行**的首選方法。顧名思義,任務並行庫 (tpl) 基於任務的概念。 術語「任務並行」是指乙個或多個獨立的任務同時執行。任務表示非同步操作,在某些方面它類似於建立新執行緒或 threadpool 工作項,但抽象級別較高。 任務的提供有兩個主要好處:
1). 系統資源的使用效率更高,可伸縮性更好。
在後台,任務排隊到 threadpool,threadpool 已使用登山等演算法進行增強,這些演算法能夠確定並調整到可最大化吞吐量的執行緒數。 這會使任務相對輕量,可以建立很多任務,啟用細化並行
2). tpl提供了一組簡單豐富的 api,這些 api 支援等待、取消、繼續、可靠的異常處理、詳細狀態、自定義計畫等功能。降低多執行緒編碼和並行程式設計的複雜度,提公升開發效率。
1. 建立和執行任務
多次執行,輸出結果:
上面的示例中,建立和執行任務有兩種方式:
多次執行,發現兩種執行結果,為什麼?
task1和task2的任務都被放置在執行緒池的工作者執行緒中,任務的執行順序是不確定的。
2. 取消任務
關鍵的物件:cancellationtoken
測試**:
執行輸出:
3. 建立任務集合並輸出結果
關鍵知識點:
task.result操作意味著什麼?等待task非同步呼叫完成,從效果上等同於wait方法
4.處理任務異常
測試**:
執行輸出:
關鍵知識點:
5. 多工的序列化
關鍵知識點:
6. 多工等待執行完成
多次執行輸出:
關鍵知識點:
8. 建立子任務
關鍵知識點:
9. 補充乙個知識點:前台執行緒和後台執行緒
應用程式必須執行完所有的前台執行緒才可以退出;
對於後台執行緒,應用程式則可以不考慮其是否已經執行完畢而直接退出,所有的後台執行緒在應用程式退出時都會自動結束。
那麼,thread、執行緒池的執行緒、task都各自屬於哪一類執行緒?
準備再寫一篇部落格,分享幾個多執行緒非同步我們踩過的坑和解決方法。
周國慶2017/6/9
非同步程式設計(或多執行緒程式設計)
程序是一種正在執行的程式。執行緒是程式中的乙個執行流。多執行緒是指乙個程式中可以同時執行多個不同的執行緒來執行不同的任務。thread是建立和控制線程的類。managedthreadid是執行緒id。currentthread是獲取當前正在執行的執行緒。同步是呼叫一旦開始,呼叫者必須等到方法呼叫返回...
多執行緒和非同步
非同步執行緒 前台執行緒 後台執行緒 預設前台執行緒 有執行緒的取消 完成 失敗通知等互動性操作 通過jion阻塞,達到執行緒執行的先後次序 預設後台執行緒 無線程的取消 完成 失敗通知等互動性操作 可以減少每次建立執行緒的開銷 static void main string args 主線程執行完...
多執行緒和非同步
c 中非同步和多執行緒的區別是什麼呢?非同步和多執行緒兩者都可以達到避免呼叫執行緒阻塞的目的,從而提高軟體的可響應性。甚至有些時候我們就認為非同步和多執行緒是等同的概念。但是,非同步和多執行緒還是有一些區別的。而這些區別造成了使用非同步和多執行緒的時機的區別。所有的程式最終都會由計算機硬體來執行,所...