1 鸿蒙APP开发:【ArkTS类库多线程】TaskPool和Worker的对比-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙APP开发:【ArkTS类库多线程】TaskPool和Worker的对比

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-03-26 22:09 次阅读

TaskPool(任务池)和Worker的作用是为应用程序提供一个多线程的运行环境,用于处理耗时的计算任务或其他密集型任务。可以有效地避免这些任务阻塞主线程,从而最大化系统的利用率,降低整体资源消耗,并提高系统的整体性能。

本文将从实现特点和适用场景两个方面来进行TaskPool与Worker的比较,同时提供了各自运作机制和注意事项的相关说明。

一、实现特点对比

表1 TaskPool和Worker的实现特点对比

实现TaskPoolWorker
内存模型线程间隔离,内存不共享。线程间隔离,内存不共享。
参数传递机制采用标准的结构化克隆算法(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喔

搜狗高速浏览器截图20240326151547.png

二、适用场景对比

TaskPool偏向独立任务维度,该任务在线程中执行,无需关注线程的生命周期,超长任务(大于3分钟)会被系统自动回收;而Worker偏向线程的维度,支持长时间占据线程执行,需要主动管理线程生命周期。

常见的一些开发场景及适用具体说明如下:

有关联的一系列同步任务。例如在一些需要创建、使用句柄的场景中,句柄创建每次都是不同的,该句柄需永久保存,保证使用该句柄进行操作,需要使用Worker。

需要频繁取消的任务。例如图库大图浏览场景,为提升体验,会同时缓存当前图片左右侧各2张图片,往一侧滑动跳到下一张图片时,要取消另一侧的一个缓存任务,需要使用TaskPool。

大量或者调度点较分散的任务。例如大型应用的多个模块包含多个耗时任务,不方便使用8个Worker去做负载管理,推荐采用TaskPool。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Worker
    +关注

    关注

    0

    文章

    8

    浏览量

    6457
  • 鸿蒙
    +关注

    关注

    57

    文章

    2339

    浏览量

    42804
收藏 人收藏

    评论

    相关推荐

    鸿蒙开发:【线程模型】

    管理其他线程ArkTS引擎实例,例如使用TaskPool(任务池)创建任务或取消任务、启动和终止Worker线程
    的头像 发表于 06-13 16:38 392次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>:【<b class='flag-5'>线程</b>模型】

    鸿蒙OS开发实例:【ArkTS多线程@Concurrent装饰器校验并发函数】

    在使用TaskPool时,执行的并发函数需要使用该装饰器修饰,否则无法通过相关校验。从API version 9开始,该装饰器支持在ArkTS卡片中使用。
    的头像 发表于 04-02 14:45 666次阅读
    <b class='flag-5'>鸿蒙</b>OS<b class='flag-5'>开发</b>实例:【<b class='flag-5'>ArkTS</b><b class='flag-5'>类</b><b class='flag-5'>库</b><b class='flag-5'>多线程</b>@Concurrent装饰器校验并发函数】

    鸿蒙OS开发实例:【ArkTS多线程CPU密集型任务TaskPool

    CPU密集型任务是指需要占用系统资源处理大量计算能力的任务,需要长时间运行,这段时间会阻塞线程其它事件的处理,不适宜放在主线程进行。例如图像处理、视频编码、数据分析等。 基于多线程并发机制处理CPU密集型任务可以提高CPU
    的头像 发表于 04-01 22:25 829次阅读
    <b class='flag-5'>鸿蒙</b>OS<b class='flag-5'>开发</b>实例:【<b class='flag-5'>ArkTS</b><b class='flag-5'>类</b><b class='flag-5'>库</b><b class='flag-5'>多线程</b>CPU密集型任务<b class='flag-5'>TaskPool</b>】

    鸿蒙OS开发案例:【ArkTS多线程CPU密集型任务Worker

    通过某地区提供的房价数据训练一个简易的房价预测模型,该模型支持通过输入房屋面积和房间数量去预测该区域的房价,模型需要长时间运行,房价预测需要使用前面的模型运行结果,因此需要使用Worker
    的头像 发表于 04-01 21:55 1092次阅读
    <b class='flag-5'>鸿蒙</b>OS<b class='flag-5'>开发</b>案例:【<b class='flag-5'>ArkTS</b><b class='flag-5'>类</b><b class='flag-5'>库</b><b class='flag-5'>多线程</b>CPU密集型任务<b class='flag-5'>Worker</b>】

    鸿蒙原生应用开发-ArkTS语言基础多线程并发概述

    的功能,它允许在不同的进程间传递对象的引用,使得不同进程之间可以共享对象的状态和方法,服务提供者必须继承此类。 二、TaskPoolWorker ArkTS提供了TaskPool
    发表于 03-28 14:35

    鸿蒙原生应用开发-ArkTS语言基础多线程TaskPoolWorker对比(三)

    是不同的,因此TaskPool工作线程只能使用线程安全的,例如UI相关的非线程安全不能使用。
    发表于 03-27 16:26

    鸿蒙APP开发:【ArkTS多线程TaskPoolWorker对比(2)

    创建Worker线程称为宿主线程(不一定是主线程,工作线程也支持创建Worker
    的头像 发表于 03-27 15:44 526次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>APP</b><b class='flag-5'>开发</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'>对比</b>(2)

    鸿蒙原生应用开发-ArkTS语言基础多线程TaskPoolWorker对比(二)

    TaskPool运作机制 图1 TaskPool运作机制示意图 TaskPool支持开发者在主线程封装任务抛给任务队列,系统选择合适的工作
    发表于 03-26 15:25

    鸿蒙原生应用开发-ArkTS语言基础多线程TaskPoolWorker对比(一)

    TaskPool(任务池)和Worker的作用是为应用程序提供一个多线程的运行环境,用于处理耗时的计算任务或其他密集型任务。可以有效地避免这些任务阻塞主线程,从而最大化系统的利用率,降
    发表于 03-25 14:11

    鸿蒙原生应用开发-ArkTS语言基础多线程并发概述

    的功能,它允许在不同的进程间传递对象的引用,使得不同进程之间可以共享对象的状态和方法,服务提供者必须继承此类。 二、TaskPoolWorker ArkTS提供了TaskPool
    发表于 03-22 15:40

    鸿蒙原生应用开发-ArkTS语言基础多线程I/O密集型任务开发

    filePath2 = ...; // 使用TaskPool执行包含密集I/O的并发函数 // 数组较大时,I/O密集型任务任务分发也会抢占主线程,需要使用多线程能力
    发表于 03-21 14:57

    鸿蒙原生应用开发-ArkTS语言基础多线程CPU密集型任务TaskPool

    CPU密集型任务是指需要占用系统资源处理大量计算能力的任务,需要长时间运行,这段时间会阻塞线程其它事件的处理,不适宜放在主线程进行。例如图像处理、视频编码、数据分析等。 基于多线程并发机制处理CPU
    发表于 03-19 14:14

    鸿蒙原生应用开发-ArkTS语言基础多线程@Concurrent装饰器校验并发函数

    在使用TaskPool时,执行的并发函数需要使用该装饰器修饰,否则无法通过相关校验。从API version 9开始,该装饰器支持在ArkTS卡片中使用。 装饰器说明 装饰器使用示例 import
    发表于 03-18 10:30

    鸿蒙原生应用开发-ArkTS语言基础概述

    ArkTS语言基础是HarmonyOS系统上为应用开发者提供的常用基础能力,主要包含能力如下图所示。 1.提供异步并发和多线程并发的能
    发表于 03-05 15:42

    ArkTS语言基础-解析

    ArkTS语言基础是HarmonyOS系统上为应用开发者提供的常用基础能力,主要包含能力如下图所示。 图1 ArkTS语言基础
    发表于 02-20 16:44