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。

审核编辑 黄宇

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

    关注

    0

    文章

    8

    浏览量

    6680
  • 鸿蒙
    +关注

    关注

    60

    文章

    2856

    浏览量

    45340
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux多线程对比线程的优势

    :「资源利用率」:通过多线程,可以更有效地利用CPU资源,特别是多核CPU。「并行处理」:线程允许同时执行多个任务,提高程序的执行效率。「简化设计」:使用线程可以简化程序设计,因为线程
    发表于 12-01 06:11

    多线程的安全注意事项

    多线程安全是指多个线程同时访问或修改共享资源时,能够保证程序的正确性和可靠性。 开发者选择TaskPoolWorker进行
    发表于 06-20 07:49

    同步任务开发指导

    ,例如无法单例创建的对象实现的方法。 使用TaskPool处理同步任务 当调度独立的任务,或者一系列任务为静态方法实现,或者可以通过单例构造唯一的句柄或对象,可在不同任务线程之间
    发表于 06-19 07:57

    CPU密集型任务开发指导

    密集型任务可以提高CPU利用率,提升应用程序响应速度。 当任务不需要长时间(3分钟)占据后台线程,而是一个个独立的任务时,推荐使用TaskPool,反之推荐使用Worker。接下来将以图像直方图处理
    发表于 06-19 06:05

    TaskPoolWorker对比分析

    支持。不支持。适用场景对比 TaskPoolWorker均支持多线程并发能力。由于TaskPool的工作
    发表于 06-18 06:43

    什么是ArkTS

    、提高系统的整体性能,开发者无需关心线程实例的生命周期。 Worker支持多线程并发,支持Worker线
    发表于 06-17 06:24

    鸿蒙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开发宝藏案例分享---切面编程实战揭秘

    鸿蒙切面编程(AOP)实战指南:隐藏的宝藏功能大揭秘! 大家好!今天在翻鸿蒙开发者文档时,意外发现了官方埋藏的「切面编程」宝藏案例!实际开发中这些技巧能大幅提升效率,却很少被提及。下面
    发表于 06-12 16:21

    鸿蒙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调试

    开发者可通过在workertaskpool代码上设置断点,对worker/taskpool进行断点调试。 一、
    发表于 03-13 17:46

    鸿蒙文件传输三方上线开源鸿蒙社区 十行代码实现大文件高速传输

    近日,华为在OpenHarmony社区上线了“super_fast_file_trans”文件传输三方(以下简称“SFFT”)。这一三方的推出,为开发者提供了一套支持大文件多线程
    发表于 03-06 10:29