CPU密集型任務(wù)是指需要占用系統(tǒng)資源處理大量計算能力的任務(wù),需要長時間運(yùn)行,這段時間會阻塞線程其它事件的處理,不適宜放在主線程進(jìn)行。例如圖像處理、視頻編碼、數(shù)據(jù)分析等。
基于多線程并發(fā)機(jī)制處理CPU密集型任務(wù)可以提高CPU利用率,提升應(yīng)用程序響應(yīng)速度。
當(dāng)進(jìn)行一系列同步任務(wù)時,推薦使用Worker;而進(jìn)行大量或調(diào)度點(diǎn)較為分散的獨(dú)立任務(wù)時,不方便使用8個Worker去做負(fù)載管理,推薦采用TaskPool。接下來將以圖像直方圖處理以及后臺長時間的模型預(yù)測任務(wù)分別進(jìn)行舉例。
使用TaskPool進(jìn)行圖像直方圖處理
1.實(shí)現(xiàn)圖像處理的業(yè)務(wù)邏輯。
2.數(shù)據(jù)分段,將各段數(shù)據(jù)通過不同任務(wù)的執(zhí)行完成圖像處理。
3.創(chuàng)建Task,通過execute()執(zhí)行任務(wù),在當(dāng)前任務(wù)結(jié)束后,會將直方圖處理結(jié)果同時返回。
結(jié)果數(shù)組匯總處理。
import taskpool from '@ohos.taskpool';
@Concurrent
function imageProcessing(dataSlice: ArrayBuffer) {
// 步驟1: 具體的圖像處理操作及其他耗時操作
return dataSlice;
}
function histogramStatistic(pixelBuffer: ArrayBuffer) {
// 步驟2: 分成三段并發(fā)調(diào)度
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: 結(jié)果處理
});
taskpool.execute(task2).then((ret: ArrayBuffer[]) = > {
// 步驟3: 結(jié)果處理
});
taskpool.execute(task3).then((ret: ArrayBuffer[]) = > {
// 步驟3: 結(jié)果處理
});
}
@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%')
}
}
審核編輯 黃宇
-
cpu
+關(guān)注
關(guān)注
68文章
10951瀏覽量
213948 -
多線程
+關(guān)注
關(guān)注
0文章
278瀏覽量
20111 -
鴻蒙
+關(guān)注
關(guān)注
57文章
2411瀏覽量
43302 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
190瀏覽量
4646
發(fā)布評論請先 登錄
相關(guān)推薦
HarmonyOS CPU與I/O密集型任務(wù)開發(fā)指導(dǎo)

鴻蒙OS開發(fā)案例:【ArkTS類庫多線程CPU密集型任務(wù)Worker】

ArkTS語言基礎(chǔ)類庫-解析
鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫概述
鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫多線程CPU密集型任務(wù)TaskPool
鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫多線程I/O密集型任務(wù)開發(fā)
鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫多線程TaskPool和Worker的對比(一)
鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫多線程TaskPool和Worker的對比(二)
什么時候要使用多線程
HarmonyOS CPU與I/O密集型任務(wù)開發(fā)指導(dǎo)
HarmonyOS語言基礎(chǔ)類庫開發(fā)指南上線啦!
鴻蒙APP開發(fā):【ArkTS類庫多線程】TaskPool和Worker的對比

鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫多線程I/O密集型任務(wù)開發(fā)】

鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫多線程@Concurrent裝飾器校驗并發(fā)函數(shù)】

評論