鸿蒙编程江湖:深入理解TaskPool和Worker的并发任务执行

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。

鸿蒙系统提供了两种并发能力:TaskPool 和 Worker。它们都基于 Actor 并发模型实现,但它们的使用场景和功能有所不同。

  • TaskPool:TaskPool 是一个多线程运行环境,它提供了任务的执行、取消、优先级设置等功能。TaskPool 适用于独立任务,例如计算密集型任务、I/O 密集型任务等。
  • Worker:Worker 是一个可以长时间运行的后台线程,它支持与宿主线程之间的消息传递。Worker 适用于长时间运行的任务,例如后台数据处理、模型训练等。

TaskPool 和 Worker 的区别与使用场景

特性 TaskPool Worker
内存模型 线程间隔离,内存不共享 线程间隔离,内存不共享
参数传递机制 采用标准的结构化克隆算法(Structured Clone)进行序列化、反序列化,完成参数传递。支持 ArrayBuffer 转移和 SharedArrayBuffer 共享。 采用标准的结构化克隆算法(Structured Clone)进行序列化、反序列化,完成参数传递。支持 ArrayBuffer 转移和 SharedArrayBuffer 共享。
参数传递 直接传递,无需封装,默认进行 transfer。 消息对象唯一参数,需要自己封装。
方法调用 直接将方法传入调用。 在 Worker 线程中进行消息解析并调用对应方法。
返回值 异步调用后默认返回。 主动发送消息,需在 onmessage 解析赋值。
生命周期 TaskPool 自动管理生命周期,无需关心任务负载高低。 开发者自行管理 Worker 的数量及生命周期。
任务池个数上限 自动管理,无需配置。 同个进程下,最多支持同时开启 64 个 Worker 线程,实际数量由进程内存决定。
任务执行时长上限 3 分钟(不包含 Promise 和 async/await 异步调用的耗时,例如网络下载、文件读写等 I/O 任务的耗时),长时任务无执行时长上限。 无限制。
设置任务的优先级 支持配置任务优先级。 不支持。
执行任务的取消 支持取消已经发起的任务。 不支持。
线程复用 支持。 不支持。
任务延时执行 支持。 不支持。
设置任务依赖关系 支持。 不支持。
串行队列 支持。 不支持。
任务组 支持。 不支持。
使用场景
  • TaskPool:适用于独立任务,例如计算密集型任务、I/O 密集型任务等。
  • Worker:适用于长时间运行的任务,例如后台数据处理、模型训练等。

TaskGroup 的管理与任务优先级

TaskGroup:TaskGroup 是一个任务集合,可以将多个任务添加到 TaskGroup 中,并一起执行。TaskGroup 支持配置任务的优先级。
示例

import {
   
    taskpool } from '@kit.ArkTS'
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值