【HarmonyOS NEXT】多线程并发-taskpool

一、背景

在鸿蒙开发中提供了两种多线程并发方案,分别是TaskPool与Worker,此篇文章主要总结下TaskPool

二、TaskPool概念

1、TaskPool是为应用提供多线程运行环境,旨在降低资源消耗并提升系统性能

2、开发者无需关心线程的生命周期,由系统统一管理线程的创建、调度和销毁

三、怎么用

使用TaskPool流程:定义任务 → 提交任务 → 处理结果 → 取消任务(可选)

步骤一:定义耗时任务(必须用 @Concurrent 标记)

所有提交到 TaskPool 的耗时函数,必须通过@Concurrent装饰器标记——这是鸿蒙的强制要求,用于告知系统“该函数是耗时任务,需在后台线程执行”。

注意:该函数需满足「无状态、参数可序列化」,不能直接操作 UI(如修改 @State 变量、调用 UI 组件方法)。

@Concurrent function computeTask(a: number, b: number): number { let start = Date.now(); while (Date.now() - start < 2000) { } // 阻塞2秒(后台线程,不影响UI) return a + b; }

步骤二、提交任务+处理结果

创建 Task 实例,将函数和参数包装起来;提交到任务池执行,并等待 Promise 返回的结果

export class taskpoolUtils { private static instance: taskpoolUtils | undefined; public static getInstance(): taskpoolUtils { if (!taskpoolUtils.instance) { taskpoolUtils.instance = new taskpoolUtils(); } return taskpoolUtils.instance; } async runConcurrentTask() { try { // 1. 同步创建Task实例 const task: taskpool.Task = new taskpool.Task(computeTask, 10, 20); // 2. 提交任务到后台线程 const result = await taskpool.execute(task); console.log('lucy== 计算结果result', result); // 2秒后打印30 } catch (err) { // 捕获任务执行异常 console.error('lucy== 任务执行失败', JSON.stringify(err)); } } }

最终效果执行

import { ScreenUtils } from '../utils/ScreenUtils'; import { taskpoolUtils } from '../utils/taskpoolUtils' @Entry @Component struct Index { private globalNavStack: NavPathStack = new NavPathStack(); //UI状态,验证taskpool不阻塞UI @State uiText: string = '未执行任务'; build() { Column() { Navigation(this.globalNavStack) { // 显示UI状态,验证是否阻塞 Text(this.uiText).fontSize(20).margin(20); Button('跳转到login组件+执行耗时任务') .onClick(() => { // 1. 先更新UI(验证UI线程没被阻塞) this.uiText = '任务执行中...'; // 2. 跳转页面(UI操作) this.globalNavStack.pushPathByName('loginPage', null, false); // 3. 执行taskpool耗时任务 taskpoolUtils.getInstance().runConcurrentTask().then(() => { // 任务完成后更新UI this.uiText = '任务执行完成'; }); // 4. 验证:任务执行中,UI仍能响应(立即打印,不会等2秒) console.log('lucy== UI线程未阻塞,立即执行'); }) } .height('100%') .width('100%') .padding({ top: ScreenUtils.getInstance().getStatusBarHeight() }) } } }

四、适用场景

  • 短耗时任务:执行时间建议 ≤ 5 秒(如缓存检查、MD5 校验、小型数据计算、接口参数加密);

  • 无状态任务:任务执行不依赖外部状态,多次执行结果一致(如相同参数的 MD5 计算,结果始终相同);

  • 高并发任务:需要同时执行多个独立任务(如批量下载多个小插件的前置检查);

  • 优先级敏感任务:不同任务有优先级差异(如用户主动触发的下载 > 后台自动更新)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1132023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据领域数据架构的发展趋势洞察

大数据领域数据架构的发展趋势洞察&#xff1a;从传统到新兴的演进之路 摘要/引言 在当今数字化时代&#xff0c;大数据的规模和复杂性呈指数级增长&#xff0c;对数据架构提出了前所未有的挑战。传统的数据架构在应对海量、高维、实时性的数据时逐渐显得力不从心。本文旨在深…

在 Linux 发行版中安装 Times New Roman 字体

在Linux系统中安装Times New Roman字体&#xff0c;可以通过以下几种方法&#xff1a; 方法一&#xff1a;通过字体管理器安装&#xff08;推荐&#xff09;下载字体文件&#xff1a; 从Windows系统复制times.ttf、timesbd.ttf、timesbi.ttf、timesi.ttf等文件或从字体网站下载…

n8n 满分漏洞 Ni8mare 可导致服务器遭劫持

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01;编译&#xff1a;代码卫士n8n 中存在一个CVSS满分、被称为 “Ni8mare” 的严重漏洞CVE-2026-21858&#xff0c;可导致未认证攻击者控制本地部署的工作流自动化平台n8n 实例。网络安全公司 Cyera 表示&#xff0c;目前…

【配电网重构】基于混合整数二阶锥配电网重构研究(Matlab代码实现)

【配电网重构】基于混合整数二阶锥配电网重构研究&#xff08;Matlab代码实现&#xff09;

[特殊字符]_内存管理深度解析:如何避免GC导致的性能陷阱[20260108170807]

作为一名经历过无数性能调优案例的工程师&#xff0c;我深知内存管理对Web应用性能的影响有多大。在最近的一个项目中&#xff0c;我们遇到了一个棘手的性能问题&#xff1a;系统在高并发下会出现周期性的延迟飙升&#xff0c;经过深入分析&#xff0c;发现问题根源竟然是垃圾回…

[特殊字符]_压力测试与性能调优的完整指南[20260108171530]

作为一名经历过无数次压力测试的工程师&#xff0c;我深知压力测试在性能调优中的重要性。压力测试不仅是验证系统性能的必要手段&#xff0c;更是发现性能瓶颈和优化方向的关键工具。今天我要分享的是基于真实项目经验的压力测试与性能调优完整指南。 &#x1f4a1; 压力测试…

今天智谱上市,成为全球大模型第一股!

今天智谱&#xff08;股票代码&#xff1a;2513.HK&#xff09;于2026年1月8日在港交所主板正式挂牌上市&#xff0c;成为"全球大模型第一股"。公司开盘报120港元&#xff0c;较发行价116.2港元上涨3.27%&#xff0c;市值达528亿港元。

今天智谱上市,成为全球大模型第一股!

今天智谱&#xff08;股票代码&#xff1a;2513.HK&#xff09;于2026年1月8日在港交所主板正式挂牌上市&#xff0c;成为"全球大模型第一股"。公司开盘报120港元&#xff0c;较发行价116.2港元上涨3.27%&#xff0c;市值达528亿港元。

小米集团2025千万技术大奖正式颁发,自研芯片玄戒O1斩获最高奖项

1月7日&#xff0c;2025小米“千万技术大奖”颁奖典礼在北京小米科技园举办。经过三个月的激烈竞争与严苛评选&#xff0c;小米自研芯片“玄戒O1”凭借创新性、领先性和影响力等多个维度的卓越表现&#xff0c;荣获千万技术大奖最高奖项&#xff0c;小米集团创始人、董事长兼 C…

MATLAB实现流形正则化主题模型LapPLSI算法详解

在文本挖掘和主题建模领域,传统的pLSA(Probabilistic Latent Semantic Analysis)和LDA模型假设文档独立同分布,但现实中文档往往存在内在关联(如引用关系、相似内容或社交网络)。为了利用这些文档间的流形结构,研究者提出了Laplacian Probabilistic Latent Semantic Ind…

MATLAB实现大规模K-means聚类并保存分区结果到二进制文件

在图像检索、特征量化以及向量压缩等任务中,经常需要对海量高维特征向量(如SIFT、GIST或深度学习提取的特征)进行K-means聚类,以构建视觉词袋模型或进行产品量化(Product Quantization)。当聚类中心数达到数百到数千、数据量达到百万级别时,标准的kmeans函数往往速度较慢…

企业级学科竞赛管理管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着教育信息化的快速发展&#xff0c;学科竞赛作为培养学生创新能力和实践能力的重要途径&#xff0c;其管理效率和质量成为高校关注的焦点。传统的人工管理方式存在信息滞后、数据冗余、协同效率低等问题&#xff0c;亟需通过信息化手段实现竞赛管理的标准化和智能化。企…

MATLAB实现图正则化稀疏编码的系数求解:Feature-Sign Search算法详解

在稀疏编码任务中,学习稀疏系数是核心步骤之一。传统的L1正则最小二乘问题(L1LS)可以通过多种方式求解,而Feature-Sign Search算法是一种高效的近似优化方法,它通过主动集策略和符号约束,快速求解带L1正则的二次规划问题。 今天我们来深入探讨一个扩展版本的稀疏系数学习…

【大模型应用开发】核心问题深度拆解(原理+方案+落地实践)

文章目录目录引言1. 大模型应用的基本组成拆解2. Token与上下文窗口&#xff1a;长文本处理策略3. 函数/工具调用&#xff08;Tool Use&#xff09;&#xff1a;Schema设计、参数校验与错误回退3.1 参数Schema设计3.2 参数校验3.3 错误回退策略4. RAG的完整流程理解&#xff1a…

美国芯片再次靠华人拯救成功,重执芯片牛耳,华人的能力得到证明

华人陈立武担任Intel的CEO仅仅9个月就宣布1.8纳米工艺取得成功&#xff0c;并率先拿出了1.8纳米生产的处理器&#xff0c;而日前陈立武再次大动作&#xff0c;主动放下身段与GPU领头羊NVIDIA合作&#xff0c;意图重振PC业务&#xff0c;此举更代表着陈立武的务实和合作精神&…

开源版 Manus 火爆全网,狂揽 7.5 万 GitHub Star!

2026 新年刚开始&#xff0c;科技圈最重磅的消息&#xff0c;莫过于 Meta 豪掷 20 亿美金&#xff0c;收购号称“通用智能体”的 Manus。此前也体验过 Manus&#xff0c;不得不说其自动化能力确实惊艳。只需给它一个目标&#xff0c;就能帮我们自动操作电脑&#xff0c;把事情干…

企业级墙绘产品展示交易平台管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着数字化经济的快速发展&#xff0c;传统墙绘行业面临信息不对称、交易效率低下等问题。企业级墙绘产品展示交易平台的出现&#xff0c;为墙绘设计师、供应商和客户提供了高效的在线交互渠道。该平台通过整合行业资源&#xff0c;优化交易流程&#xff0c;解决了传统模式…

Oracle数据库中的层次查询优化

在处理大型数据库中的层次查询时,性能优化是一个关键问题。本文将通过一个实际的例子,探讨如何优化Oracle数据库中使用CONNECT BY NOCYCLE PRIOR语句的查询。 问题背景 假设我们有一张名为TABLE1的表,包含客户号(CUST_NUM)、客户ID(CUST_ID)、等级(TIER)、开始日期(…

基于CNN的车牌识别网络

前期准备 这篇博客记录神经网络方法与应用的实验项目&#xff0c;项目开源链接&#xff1a;【免费】神经网络课程设计项目.zip资源-CSDN下载 数据集 数据集是我本人在百度飞桨网站上找到的&#xff0c;这个数据集整理的很全面详细&#xff0c;数据集信息包含10w张训练照片&a…

Spring Boot 钩子全集实战(五):ApplicationContextInitializer详解

Spring Boot 钩子全集实战&#xff08;五&#xff09;&#xff1a;ApplicationContextInitializer 详解 在上一篇中&#xff0c;我们深入剖析了 SpringApplicationRunListener.environmentPrepared() 这一关键扩展点&#xff0c;实现了环境合法性校验、启动上下文传递、多环境…