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

从上面的OpenHarmony技术梳理来看,鸿蒙的学习内容也是很多的。现在全网的鸿蒙学习文档也是非常的少,下面推荐一些:完整内容可在头像页保存,或这qr23.cn/AKFP8k甲助力
内容包含:《鸿蒙NEXT星河版开发学习文档》
这些就是对往后开发者的分享,希望大家多多点赞关注喔!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。