TaskPool(任務池)和Worker的作用是為應用程序提供一個多線程的運行環境,用于處理耗時的計算任務或其他密集型任務。可以有效地避免這些任務阻塞主線程,從而最大化系統的利用率,降低整體資源消耗,并提高系統的整體性能。
本文將從實現特點和適用場景兩個方面來進行TaskPool與Worker的比較,同時提供了各自運作機制和注意事項的相關說明。
一、實現特點對比
表1 TaskPool和Worker的實現特點對比
| 實現 | TaskPool | Worker |
|---|---|---|
| 內存模型 | 線程間隔離,內存不共享。 | 線程間隔離,內存不共享。 |
| 參數傳遞機制 | 采用標準的結構化克隆算法(Structured Clone)進行序列化、反序列化,完成參數傳遞。支持ArrayBuffer轉移和SharedArrayBuffer共享。 | 采用標準的結構化克隆算法(Structured Clone)進行序列化、反序列化,完成參數傳遞。支持ArrayBuffer轉移和SharedArrayBuffer共享。 |
| 參數傳遞 | 直接傳遞,無需封裝,默認進行transfer。 | 消息對象唯一參數,需要自己封裝。 |
| 方法調用 | 直接將方法傳入調用。 | 在Worker線程中進行消息解析并調用對應方法。 |
| 返回值 | 異步調用后默認返回。 | 主動發送消息,需在onmessage解析賦值。 |
| 生命周期 | TaskPool自行管理生命周期,無需關心任務負載高低。 | 開發者自行管理Worker的數量及生命周期。 |
| 任務池個數上限 | 自動管理,無需配置。 | 同個進程下,最多支持同時開啟8個Worker線程。 |
| 任務執行時長上限 | 無限制。 | 無限制。 |
| 設置任務的優先級 | 不支持。 | 不支持。 |
| 執行任務的取消 | 支持取消任務隊列中等待的任務。 | 不支持。 |
鴻蒙開發應用知識更新庫gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md在這。 | 或+mau123789學習,是v喔 |

二、適用場景對比
TaskPool偏向獨立任務維度,該任務在線程中執行,無需關注線程的生命周期,超長任務(大于3分鐘)會被系統自動回收;而Worker偏向線程的維度,支持長時間占據線程執行,需要主動管理線程生命周期。
常見的一些開發場景及適用具體說明如下:
有關聯的一系列同步任務。例如在一些需要創建、使用句柄的場景中,句柄創建每次都是不同的,該句柄需永久保存,保證使用該句柄進行操作,需要使用Worker。
需要頻繁取消的任務。例如圖庫大圖瀏覽場景,為提升體驗,會同時緩存當前圖片左右側各2張圖片,往一側滑動跳到下一張圖片時,要取消另一側的一個緩存任務,需要使用TaskPool。
大量或者調度點較分散的任務。例如大型應用的多個模塊包含多個耗時任務,不方便使用8個Worker去做負載管理,推薦采用TaskPool。
審核編輯 黃宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
Worker
+關注
關注
0文章
8瀏覽量
6703 -
鴻蒙
+關注
關注
60文章
2963瀏覽量
45883
發布評論請先 登錄
相關推薦
熱點推薦
Linux多線程對比單線程的優勢
:「資源利用率」:通過多線程,可以更有效地利用CPU資源,特別是多核CPU。「并行處理」:線程允許同時執行多個任務,提高程序的執行效率。「簡化設計」:使用線程可以簡化程序設計,因為線程
發表于 12-01 06:11
同步任務開發指導
,例如無法單例創建的類對象實現的方法。
使用TaskPool處理同步任務
當調度獨立的任務,或者一系列任務為靜態方法實現,或者可以通過單例構造唯一的句柄或類對象,可在不同任務線程之間
發表于 06-19 07:57
CPU密集型任務開發指導
密集型任務可以提高CPU利用率,提升應用程序響應速度。
當任務不需要長時間(3分鐘)占據后臺線程,而是一個個獨立的任務時,推薦使用TaskPool,反之推薦使用Worker。接下來將以圖像直方圖處理
發表于 06-19 06:05
鴻蒙5開發寶藏案例分享---優化應用時延問題
鴻蒙性能優化寶藏指南:6大實戰案例讓你的應用飛起來!
大家好!今天在翻鴻蒙文檔時挖到了 性能優化寶藏庫 !官方竟然悄悄藏了這么多實戰案例,從UI渲染到數據庫操作應有盡有。這些案例要是早
發表于 06-13 10:08
鴻蒙5開發寶藏案例分享---跨線程性能優化指南
;>Worker</span>做多線程開發時,總遇到對象跨線程卡頓的問題,原來鴻蒙早就提供了解決方案。下面結合代碼和實戰案
發表于 06-12 17:13
鴻蒙5開發寶藏案例分享---性能體驗設計
例子:
// 錯誤示范:直接在主線程加載大圖
Image($r(\'app.media.large_img\')) // 可能造成界面凍結
// 正確做法:異步加載+占位符
Column
發表于 06-12 16:45
鴻蒙5開發寶藏案例分享---應用并發設計
?** 鴻蒙并發編程實戰指南:解鎖ArkTS多線程黑科技**
嘿,開發者朋友們! 今天給大家扒一扒鴻蒙官方文檔里藏著的并發編程寶藏—— 10
發表于 06-12 16:19
使用DevEcoStudio 開發、編譯鴻蒙 NEXT_APP 以及使用中文插件
# 使用DevEcoStudio 開發、編譯鴻蒙 NEXT_APP 以及使用中文插件 #鴻蒙開發工具 #DevEco Studio
##
發表于 06-11 17:18
開源啦!!!基于鴻蒙ArkTS封裝的圖表組件《McCharts》,大家快來一起共創
也用鴻蒙ArkTS語法嘗試開發了一些APP,雖然還沒上架哈,不過基本的開發流程以及交互都熟悉了,而且馬上第一款
發表于 03-15 15:21
HarmonyOS NEXT 原生應用/元服務-ArkTS代碼調試worker/taskpool調試
開發者可通過在worker或taskpool代碼上設置斷點,對worker/taskpool進行斷點調試。
一、
發表于 03-13 17:46
鴻蒙文件傳輸三方庫上線開源鴻蒙社區 十行代碼實現大文件高速傳輸
近日,華為在OpenHarmony社區上線了“super_fast_file_trans”文件傳輸三方庫(以下簡稱“SFFT”)。這一三方庫的推出,為開發者提供了一套支持大文件多線程并
發表于 03-06 10:29
鴻蒙APP開發:【ArkTS類庫多線程】TaskPool和Worker的對比
評論