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瀏覽量
6457 -
鴻蒙
+關注
關注
57文章
2339瀏覽量
42805
發布評論請先 登錄
相關推薦
評論