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瀏覽量
6555 -
鴻蒙
+關注
關注
59文章
2503瀏覽量
43765
發布評論請先 登錄
開源啦!?。』?b class='flag-5'>鴻蒙ArkTS封裝的圖表組件《McCharts》,大家快來一起共創
HarmonyOS NEXT 原生應用/元服務-ArkTS代碼調試worker/taskpool調試
鴻蒙文件傳輸三方庫上線開源鴻蒙社區 十行代碼實現大文件高速傳輸
基于OpenHarmony標準系統的C++公共基礎類庫案例:ThreadPoll

鴻蒙Flutter實戰:14-現有Flutter 項目支持鴻蒙 II
socket 多線程編程實現方法
Python中多線程和多進程的區別

鴻蒙Flutter實戰:06-使用ArkTs開發Flutter鴻蒙插件
鴻蒙Flutter實戰:05-使用第三方插件
鴻蒙原生應用元服務開發-倉頡ArkTS相互操作(二)
鴻蒙原生應用元服務開發-倉頡ArkTS相互操作(一)
從多線程設計模式到對 CompletableFuture 的應用

評論