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浏览量
6706 -
鸿蒙
+关注
关注
60文章
3016浏览量
46163
发布评论请先 登录
相关推荐
热点推荐
Linux多线程对比单线程的优势
:「资源利用率」:通过多线程,可以更有效地利用CPU资源,特别是多核CPU。「并行处理」:线程允许同时执行多个任务,提高程序的执行效率。「简化设计」:使用线程可以简化程序设计,因为线程
发表于 12-01 06:11
同步任务开发指导
,例如无法单例创建的类对象实现的方法。
使用TaskPool处理同步任务
当调度独立的任务,或者一系列任务为静态方法实现,或者可以通过单例构造唯一的句柄或类对象,可在不同任务线程之间
发表于 06-19 07:57
CPU密集型任务开发指导
密集型任务可以提高CPU利用率,提升应用程序响应速度。
当任务不需要长时间(3分钟)占据后台线程,而是一个个独立的任务时,推荐使用TaskPool,反之推荐使用Worker。接下来将以图像直方图处理
发表于 06-19 06:05
鸿蒙5开发宝藏案例分享---优化应用时延问题
鸿蒙性能优化宝藏指南:6大实战案例让你的应用飞起来!
大家好!今天在翻鸿蒙文档时挖到了 性能优化宝藏库 !官方竟然悄悄藏了这么多实战案例,从UI渲染到数据库操作应有尽有。这些案例要是早
发表于 06-13 10:08
鸿蒙5开发宝藏案例分享---应用性能优化指南
任务交给子线程。优化策略 :
多线程处理 :
CPU密集型用 <span class=\"ne-text\">TaskPool<
发表于 06-12 17:17
鸿蒙5开发宝藏案例分享---跨线程性能优化指南
;>Worker</span>做多线程开发时,总遇到对象跨线程卡顿的问题,原来鸿蒙早就提供了解决方案。下面结合代码和实战案
发表于 06-12 17:13
鸿蒙5开发宝藏案例分享---分析帧率问题
鸿蒙性能优化宝藏:帧率问题实战案例解析
嘿,各位鸿蒙开发者! 今天分享一个开发中的大发现——鸿蒙官方文档里藏着一堆超实用的性能优化案例!这些
发表于 06-12 17:07
鸿蒙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
鸿蒙APP开发:【ArkTS类库多线程】TaskPool和Worker的对比
评论