TaskPool(任務池)和Worker的作用是為應用程序提供一個多線程的運行環(huán)境,用于處理耗時的計算任務或其他密集型任務??梢杂行У乇苊膺@些任務阻塞主線程,從而最大化系統(tǒng)的利用率,降低整體資源消耗,并提高系統(tǒng)的整體性能。
本文將從實現特點和適用場景兩個方面來進行TaskPool與Worker的比較,同時提供了各自運作機制和注意事項的相關說明。
一、實現特點對比
表1 TaskPool和Worker的實現特點對比
實現 | TaskPool | Worker |
---|
內存模型 | 線程間隔離,內存不共享。 | 線程間隔離,內存不共享。 |
參數傳遞機制 | 采用標準的結構化克隆算法(Structured Clone)進行序列化、反序列化,完成參數傳遞。支持ArrayBuffer轉移和SharedArrayBuffer共享。 | 采用標準的結構化克隆算法(Structured Clone)進行序列化、反序列化,完成參數傳遞。支持ArrayBuffer轉移和SharedArrayBuffer共享。 |
參數傳遞 | 直接傳遞,無需封裝,默認進行transfer。 | 消息對象唯一參數,需要自己封裝。 |
方法調用 | 直接將方法傳入調用。 | 在Worker線程中進行消息解析并調用對應方法。 |
返回值 | 異步調用后默認返回。 | 主動發(fā)送消息,需在onmessage解析賦值。 |
生命周期 | TaskPool自行管理生命周期,無需關心任務負載高低。 | 開發(fā)者自行管理Worker的數量及生命周期。 |
任務池個數上限 | 自動管理,無需配置。 | 同個進程下,最多支持同時開啟8個Worker線程。 |
任務執(zhí)行時長上限 | 無限制。 | 無限制。 |
設置任務的優(yōu)先級 | 不支持。 | 不支持。 |
執(zhí)行任務的取消 | 支持取消任務隊列中等待的任務。 | 不支持。 |
鴻蒙開發(fā)應用知識更新庫gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md 在這。 | 或+mau123789學習,是v喔 | |
二、適用場景對比
TaskPool偏向獨立任務維度,該任務在線程中執(zhí)行,無需關注線程的生命周期,超長任務(大于3分鐘)會被系統(tǒng)自動回收;而Worker偏向線程的維度,支持長時間占據線程執(zhí)行,需要主動管理線程生命周期。
常見的一些開發(fā)場景及適用具體說明如下:
有關聯(lián)的一系列同步任務。例如在一些需要創(chuàng)建、使用句柄的場景中,句柄創(chuàng)建每次都是不同的,該句柄需永久保存,保證使用該句柄進行操作,需要使用Worker。
需要頻繁取消的任務。例如圖庫大圖瀏覽場景,為提升體驗,會同時緩存當前圖片左右側各2張圖片,往一側滑動跳到下一張圖片時,要取消另一側的一個緩存任務,需要使用TaskPool。
大量或者調度點較分散的任務。例如大型應用的多個模塊包含多個耗時任務,不方便使用8個Worker去做負載管理,推薦采用TaskPool。
審核編輯 黃宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
相關推薦
管理其他線程的ArkTS引擎實例,例如使用TaskPool(任務池)創(chuàng)建任務或取消任務、啟動和終止Worker線程。
發(fā)表于 06-13 16:38
?461次閱讀
在使用TaskPool時,執(zhí)行的并發(fā)函數需要使用該裝飾器修飾,否則無法通過相關校驗。從API version 9開始,該裝飾器支持在ArkTS卡片中使用。
發(fā)表于 04-02 14:45
?791次閱讀
CPU密集型任務是指需要占用系統(tǒng)資源處理大量計算能力的任務,需要長時間運行,這段時間會阻塞線程其它事件的處理,不適宜放在主線程進行。例如圖像處理、視頻編碼、數據分析等。
基于多線程并發(fā)機制處理CPU密集型任務可以提高CPU
發(fā)表于 04-01 22:25
?908次閱讀
通過某地區(qū)提供的房價數據訓練一個簡易的房價預測模型,該模型支持通過輸入房屋面積和房間數量去預測該區(qū)域的房價,模型需要長時間運行,房價預測需要使用前面的模型運行結果,因此需要使用Worker。
發(fā)表于 04-01 21:55
?1195次閱讀
的功能,它允許在不同的進程間傳遞對象的引用,使得不同進程之間可以共享對象的狀態(tài)和方法,服務提供者必須繼承此類。
二、TaskPool和Worker
ArkTS提供了TaskPool和
發(fā)表于 03-28 14:35
是不同的,因此TaskPool工作線程只能使用線程安全的庫,例如UI相關的非線程安全庫不能使用。
發(fā)表于 03-27 16:26
創(chuàng)建Worker的線程稱為宿主線程(不一定是主線程,工作線程也支持創(chuàng)建Worker子
發(fā)表于 03-27 15:44
?582次閱讀
TaskPool運作機制
圖1 TaskPool運作機制示意圖
TaskPool支持開發(fā)者在主線程封裝任務拋給任務隊列,系統(tǒng)選擇合適的工作
發(fā)表于 03-26 15:25
TaskPool(任務池)和Worker的作用是為應用程序提供一個多線程的運行環(huán)境,用于處理耗時的計算任務或其他密集型任務??梢杂行У乇苊膺@些任務阻塞主線程,從而最大化系統(tǒng)的利用率,降
發(fā)表于 03-25 14:11
的功能,它允許在不同的進程間傳遞對象的引用,使得不同進程之間可以共享對象的狀態(tài)和方法,服務提供者必須繼承此類。
二、TaskPool和Worker
ArkTS提供了TaskPool和
發(fā)表于 03-22 15:40
filePath2 = ...;
// 使用TaskPool執(zhí)行包含密集I/O的并發(fā)函數
// 數組較大時,I/O密集型任務任務分發(fā)也會搶占主線程,需要使用多線程能力
發(fā)表于 03-21 14:57
CPU密集型任務是指需要占用系統(tǒng)資源處理大量計算能力的任務,需要長時間運行,這段時間會阻塞線程其它事件的處理,不適宜放在主線程進行。例如圖像處理、視頻編碼、數據分析等。
基于多線程并發(fā)機制處理CPU
發(fā)表于 03-19 14:14
在使用TaskPool時,執(zhí)行的并發(fā)函數需要使用該裝飾器修飾,否則無法通過相關校驗。從API version 9開始,該裝飾器支持在ArkTS卡片中使用。
裝飾器說明
裝飾器使用示例
import
發(fā)表于 03-18 10:30
ArkTS語言基礎類庫是HarmonyOS系統(tǒng)上為應用開發(fā)者提供的常用基礎能力,主要包含能力如下圖所示。
1.提供異步并發(fā)和多線程并發(fā)的能
發(fā)表于 03-05 15:42
ArkTS語言基礎類庫是HarmonyOS系統(tǒng)上為應用開發(fā)者提供的常用基礎能力,主要包含能力如下圖所示。
圖1 ArkTS語言基礎
發(fā)表于 02-20 16:44
評論