当前位置: 首页 > article >正文

鸿蒙原生应用开发-ArkTS语言基础类库多线程CPU密集型任务TaskPool

CPU密集型任务是指需要占用系统资源处理大量计算能力的任务,需要长时间运行,这段时间会阻塞线程其它事件的处理,不适宜放在主线程进行。例如图像处理、视频编码、数据分析等。
基于多线程并发机制处理CPU密集型任务可以提高CPU利用率,提升应用程序响应速度。
当进行一系列同步任务时,推荐使用Worker;而进行大量或调度点较为分散的独立任务时,不方便使用8个Worker去做负载管理,推荐采用TaskPool。接下来将以图像直方图处理以及后台长时间的模型预测任务分别进行举例。
使用TaskPool进行图像直方图处理

1.实现图像处理的业务逻辑。
2.数据分段,将各段数据通过不同任务的执行完成图像处理。
3.创建Task,通过execute()执行任务,在当前任务结束后,会将直方图处理结果同时返回。
结果数组汇总处理。

import taskpool from '@ohos.taskpool';

@Concurrent
function imageProcessing(dataSlice: ArrayBuffer) {
  // 步骤1: 具体的图像处理操作及其他耗时操作
  return dataSlice;
}

function histogramStatistic(pixelBuffer: ArrayBuffer) {
  // 步骤2: 分成三段并发调度
  let number = pixelBuffer.byteLength / 3;
  let buffer1 = pixelBuffer.slice(0, number);
  let buffer2 = pixelBuffer.slice(number, number * 2);
  let buffer3 = pixelBuffer.slice(number * 2);

  let task1 = new taskpool.Task(imageProcessing, buffer1);
  let task2 = new taskpool.Task(imageProcessing, buffer2);
  let task3 = new taskpool.Task(imageProcessing, buffer3);

  taskpool.execute(task1).then((ret: ArrayBuffer[]) => {
    // 步骤3: 结果处理
  });
  taskpool.execute(task2).then((ret: ArrayBuffer[]) => {
    // 步骤3: 结果处理
  });
  taskpool.execute(task3).then((ret: ArrayBuffer[]) => {
    // 步骤3: 结果处理
  });
}

@Entry
@Component
struct Index {
  @State message: string = 'Hello World'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            let data: ArrayBuffer;
            histogramStatistic(data);
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

本文参考引用HarmonyOS官方开发文档,基于API9。


http://www.kler.cn/a/274790.html

相关文章:

  • 智能工厂的设计软件 认知系统和内涵智能机 之1
  • uniapp图片数据流���� JFIF ��C 转化base64
  • 智能工厂的设计软件 三种处理单元(NPU/GPU/CPU)及其在深度学习框架中的作用 之4(百度文库答问 之2)
  • android 登录界面编写
  • PHPUnit使用指南:编写高效的单元测试
  • powershell(1)
  • 多线程:线程池
  • C语言经典面试题目(十六)
  • 选数异或 (AcWing 4645)
  • 设计模式学习笔记 - 规范与重构 - 8.实践:程序出错返回啥?NULL、异常、错误吗、空对象?重构ID生成器,处理各函数的异常
  • 国内外15款AI搜索引擎汇总
  • 选择排序算法(Selection Sort)原理及实现
  • 基于Spring Boot+Vue的智慧图书管理系统
  • 【使用xlrd、xlutils读写excel】
  • Devops-01-devops 是什么?
  • 自动化单元测试 Automatic Test Generation
  • 漫谈微服务网关
  • 性能优化(CPU优化技术)-NEON指令详解
  • 服务器版本命令查看
  • Http的缓存有哪些
  • 前端项目,个人笔记(五)【图片懒加载 + 路由配置 + 面包屑 + 路由行为修改】
  • k8s详细教程
  • QT 驾校系统界面布局编写
  • ES集群和分片以及脑裂
  • 竞争优势:大型语言模型 (LLM) 如何重新定义业务策略
  • DOM节点操作