0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙APP開發(fā):【ArkTS類庫多線程】TaskPool和Worker的對(duì)比

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-26 22:09 ? 次閱讀

TaskPool(任務(wù)池)和Worker的作用是為應(yīng)用程序提供一個(gè)多線程的運(yùn)行環(huán)境,用于處理耗時(shí)的計(jì)算任務(wù)或其他密集型任務(wù)。可以有效地避免這些任務(wù)阻塞主線程,從而最大化系統(tǒng)的利用率,降低整體資源消耗,并提高系統(tǒng)的整體性能。

本文將從實(shí)現(xiàn)特點(diǎn)和適用場(chǎng)景兩個(gè)方面來進(jìn)行TaskPool與Worker的比較,同時(shí)提供了各自運(yùn)作機(jī)制和注意事項(xiàng)的相關(guān)說明。

一、實(shí)現(xiàn)特點(diǎn)對(duì)比

表1 TaskPool和Worker的實(shí)現(xiàn)特點(diǎn)對(duì)比

實(shí)現(xiàn)TaskPoolWorker
內(nèi)存模型線程間隔離,內(nèi)存不共享。線程間隔離,內(nèi)存不共享。
參數(shù)傳遞機(jī)制采用標(biāo)準(zhǔn)的結(jié)構(gòu)化克隆算法(Structured Clone)進(jìn)行序列化、反序列化,完成參數(shù)傳遞。支持ArrayBuffer轉(zhuǎn)移和SharedArrayBuffer共享。采用標(biāo)準(zhǔn)的結(jié)構(gòu)化克隆算法(Structured Clone)進(jìn)行序列化、反序列化,完成參數(shù)傳遞。支持ArrayBuffer轉(zhuǎn)移和SharedArrayBuffer共享。
參數(shù)傳遞直接傳遞,無需封裝,默認(rèn)進(jìn)行transfer。消息對(duì)象唯一參數(shù),需要自己封裝。
方法調(diào)用直接將方法傳入調(diào)用。在Worker線程中進(jìn)行消息解析并調(diào)用對(duì)應(yīng)方法。
返回值異步調(diào)用后默認(rèn)返回。主動(dòng)發(fā)送消息,需在onmessage解析賦值。
生命周期TaskPool自行管理生命周期,無需關(guān)心任務(wù)負(fù)載高低。開發(fā)者自行管理Worker的數(shù)量及生命周期。
任務(wù)池個(gè)數(shù)上限自動(dòng)管理,無需配置。同個(gè)進(jìn)程下,最多支持同時(shí)開啟8個(gè)Worker線程。
任務(wù)執(zhí)行時(shí)長(zhǎng)上限無限制。無限制。
設(shè)置任務(wù)的優(yōu)先級(jí)不支持。不支持。
執(zhí)行任務(wù)的取消支持取消任務(wù)隊(duì)列中等待的任務(wù)。不支持。
鴻蒙開發(fā)應(yīng)用知識(shí)更新庫gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md在這。或+mau123789學(xué)習(xí),是v喔

搜狗高速瀏覽器截圖20240326151547.png

二、適用場(chǎng)景對(duì)比

TaskPool偏向獨(dú)立任務(wù)維度,該任務(wù)在線程中執(zhí)行,無需關(guān)注線程的生命周期,超長(zhǎng)任務(wù)(大于3分鐘)會(huì)被系統(tǒng)自動(dòng)回收;而Worker偏向線程的維度,支持長(zhǎng)時(shí)間占據(jù)線程執(zhí)行,需要主動(dòng)管理線程生命周期。

常見的一些開發(fā)場(chǎng)景及適用具體說明如下:

有關(guān)聯(lián)的一系列同步任務(wù)。例如在一些需要?jiǎng)?chuàng)建、使用句柄的場(chǎng)景中,句柄創(chuàng)建每次都是不同的,該句柄需永久保存,保證使用該句柄進(jìn)行操作,需要使用Worker。

需要頻繁取消的任務(wù)。例如圖庫大圖瀏覽場(chǎng)景,為提升體驗(yàn),會(huì)同時(shí)緩存當(dāng)前圖片左右側(cè)各2張圖片,往一側(cè)滑動(dòng)跳到下一張圖片時(shí),要取消另一側(cè)的一個(gè)緩存任務(wù),需要使用TaskPool。

大量或者調(diào)度點(diǎn)較分散的任務(wù)。例如大型應(yīng)用的多個(gè)模塊包含多個(gè)耗時(shí)任務(wù),不方便使用8個(gè)Worker去做負(fù)載管理,推薦采用TaskPool。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Worker
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    6464
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2352

    瀏覽量

    42859
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    鴻蒙開發(fā):【線程模型】

    管理其他線程ArkTS引擎實(shí)例,例如使用TaskPool(任務(wù)池)創(chuàng)建任務(wù)或取消任務(wù)、啟動(dòng)和終止Worker線程
    的頭像 發(fā)表于 06-13 16:38 ?411次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:【<b class='flag-5'>線程</b>模型】

    鴻蒙OS開發(fā)實(shí)例:【ArkTS多線程@Concurrent裝飾器校驗(yàn)并發(fā)函數(shù)】

    在使用TaskPool時(shí),執(zhí)行的并發(fā)函數(shù)需要使用該裝飾器修飾,否則無法通過相關(guān)校驗(yàn)。從API version 9開始,該裝飾器支持在ArkTS卡片中使用。
    的頭像 發(fā)表于 04-02 14:45 ?675次閱讀
    <b class='flag-5'>鴻蒙</b>OS<b class='flag-5'>開發(fā)</b>實(shí)例:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫</b><b class='flag-5'>多線程</b>@Concurrent裝飾器校驗(yàn)并發(fā)函數(shù)】

    鴻蒙OS開發(fā)實(shí)例:【ArkTS多線程CPU密集型任務(wù)TaskPool

    CPU密集型任務(wù)是指需要占用系統(tǒng)資源處理大量計(jì)算能力的任務(wù),需要長(zhǎng)時(shí)間運(yùn)行,這段時(shí)間會(huì)阻塞線程其它事件的處理,不適宜放在主線程進(jìn)行。例如圖像處理、視頻編碼、數(shù)據(jù)分析等。 基于多線程并發(fā)機(jī)制處理CPU密集型任務(wù)可以提高CPU
    的頭像 發(fā)表于 04-01 22:25 ?844次閱讀
    <b class='flag-5'>鴻蒙</b>OS<b class='flag-5'>開發(fā)</b>實(shí)例:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫</b><b class='flag-5'>多線程</b>CPU密集型任務(wù)<b class='flag-5'>TaskPool</b>】

    鴻蒙OS開發(fā)案例:【ArkTS多線程CPU密集型任務(wù)Worker

    通過某地區(qū)提供的房?jī)r(jià)數(shù)據(jù)訓(xùn)練一個(gè)簡(jiǎn)易的房?jī)r(jià)預(yù)測(cè)模型,該模型支持通過輸入房屋面積和房間數(shù)量去預(yù)測(cè)該區(qū)域的房?jī)r(jià),模型需要長(zhǎng)時(shí)間運(yùn)行,房?jī)r(jià)預(yù)測(cè)需要使用前面的模型運(yùn)行結(jié)果,因此需要使用Worker
    的頭像 發(fā)表于 04-01 21:55 ?1114次閱讀
    <b class='flag-5'>鴻蒙</b>OS<b class='flag-5'>開發(fā)</b>案例:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫</b><b class='flag-5'>多線程</b>CPU密集型任務(wù)<b class='flag-5'>Worker</b>】

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)多線程并發(fā)概述

    的功能,它允許在不同的進(jìn)程間傳遞對(duì)象的引用,使得不同進(jìn)程之間可以共享對(duì)象的狀態(tài)和方法,服務(wù)提供者必須繼承此類。 二、TaskPoolWorker ArkTS提供了TaskPool
    發(fā)表于 03-28 14:35

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)多線程TaskPoolWorker對(duì)比(三)

    是不同的,因此TaskPool工作線程只能使用線程安全的,例如UI相關(guān)的非線程安全不能使用。
    發(fā)表于 03-27 16:26

    鴻蒙APP開發(fā):【ArkTS多線程TaskPoolWorker對(duì)比(2)

    創(chuàng)建Worker線程稱為宿主線程(不一定是主線程,工作線程也支持創(chuàng)建Worker
    的頭像 發(fā)表于 03-27 15:44 ?546次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>APP</b><b class='flag-5'>開發(fā)</b>:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫</b><b class='flag-5'>多線程</b>】<b class='flag-5'>TaskPool</b>和<b class='flag-5'>Worker</b>的<b class='flag-5'>對(duì)比</b>(2)

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)多線程TaskPoolWorker對(duì)比(二)

    TaskPool運(yùn)作機(jī)制 圖1 TaskPool運(yùn)作機(jī)制示意圖 TaskPool支持開發(fā)者在主線程封裝任務(wù)拋給任務(wù)隊(duì)列,系統(tǒng)選擇合適的工作
    發(fā)表于 03-26 15:25

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)多線程TaskPoolWorker對(duì)比(一)

    TaskPool(任務(wù)池)和Worker的作用是為應(yīng)用程序提供一個(gè)多線程的運(yùn)行環(huán)境,用于處理耗時(shí)的計(jì)算任務(wù)或其他密集型任務(wù)??梢杂行У乇苊膺@些任務(wù)阻塞主線程,從而最大化系統(tǒng)的利用率,降
    發(fā)表于 03-25 14:11

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)多線程并發(fā)概述

    的功能,它允許在不同的進(jìn)程間傳遞對(duì)象的引用,使得不同進(jìn)程之間可以共享對(duì)象的狀態(tài)和方法,服務(wù)提供者必須繼承此類。 二、TaskPoolWorker ArkTS提供了TaskPool
    發(fā)表于 03-22 15:40

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)多線程I/O密集型任務(wù)開發(fā)

    filePath2 = ...; // 使用TaskPool執(zhí)行包含密集I/O的并發(fā)函數(shù) // 數(shù)組較大時(shí),I/O密集型任務(wù)任務(wù)分發(fā)也會(huì)搶占主線程,需要使用多線程能力
    發(fā)表于 03-21 14:57

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)多線程CPU密集型任務(wù)TaskPool

    CPU密集型任務(wù)是指需要占用系統(tǒng)資源處理大量計(jì)算能力的任務(wù),需要長(zhǎng)時(shí)間運(yùn)行,這段時(shí)間會(huì)阻塞線程其它事件的處理,不適宜放在主線程進(jìn)行。例如圖像處理、視頻編碼、數(shù)據(jù)分析等。 基于多線程并發(fā)機(jī)制處理CPU
    發(fā)表于 03-19 14:14

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)多線程@Concurrent裝飾器校驗(yàn)并發(fā)函數(shù)

    在使用TaskPool時(shí),執(zhí)行的并發(fā)函數(shù)需要使用該裝飾器修飾,否則無法通過相關(guān)校驗(yàn)。從API version 9開始,該裝飾器支持在ArkTS卡片中使用。 裝飾器說明 裝飾器使用示例 import
    發(fā)表于 03-18 10:30

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)概述

    ArkTS語言基礎(chǔ)是HarmonyOS系統(tǒng)上為應(yīng)用開發(fā)者提供的常用基礎(chǔ)能力,主要包含能力如下圖所示。 1.提供異步并發(fā)和多線程并發(fā)的能
    發(fā)表于 03-05 15:42

    ArkTS語言基礎(chǔ)-解析

    ArkTS語言基礎(chǔ)是HarmonyOS系統(tǒng)上為應(yīng)用開發(fā)者提供的常用基礎(chǔ)能力,主要包含能力如下圖所示。 圖1 ArkTS語言基礎(chǔ)
    發(fā)表于 02-20 16:44