ArkTS 并发:TaskPool 和 Worker,选错的代价是主线程卡死

举报
yd_211412523 发表于 2026/11/12 08:34:54 2026/11/12
【摘要】 ArkTS 是单线程模型,跑重活必须开并发。TaskPool 和 Worker 都能用,但适用场景差别很大,选错了反而更难维护。

ArkTS 是单线程模型,跑重活必须开并发。TaskPool 和 Worker 都能用,但适用场景差别很大,选错了反而更难维护。

TaskPool 适合短任务:解码图片、算哈希、解析大 JSON。用 @Concurrent 装饰函数,taskpool.execute 提交,返回 Promise。它的线程池由系统管理,任务结束线程回收,不用自己管生命周期,代码量和同步写法几乎一样。

Worker 适合长任务或者需要保持状态的场景:比如维持一个 WebSocket 长连接、跑一个持续的定时采集。它需要单独的文件、手动 postMessage 通信、手动 terminate,成本更高但控制力更强。

有一条限制必须记住:@Concurrent 函数不能访问闭包,也不能引用外层变量,参数和返回值必须可序列化。想在任务里用一个外部配置对象,只能把它作为参数传进去,否则编译能过、运行时拿到 undefined。

选型建议:先问「这个任务要跑多久」。100ms 以内其实不必开线程,拆分得当的同步代码往往比线程调度更快;几百毫秒以上的计算才值得 TaskPool,超过几秒还要持续那就上 Worker。


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。