CPU密集型任務(wù)是指需要占用系統(tǒng)資源處理大量計(jì)算能力的任務(wù),需要長時(shí)間運(yùn)行,這段時(shí)間會(huì)阻塞線程其它事件的處理,不適宜放在主線程進(jìn)行。例如圖像處理、視頻編碼、數(shù)據(jù)分析等。
基于多線程并發(fā)機(jī)制處理CPU密集型任務(wù)可以提高CPU利用率,提升應(yīng)用程序響應(yīng)速度。
當(dāng)進(jìn)行一系列同步任務(wù)時(shí),推薦使用Worker;而進(jìn)行大量或調(diào)度點(diǎn)較為分散的獨(dú)立任務(wù)時(shí),不方便使用8個(gè)Worker去做負(fù)載管理,推薦采用TaskPool。接下來將以圖像直方圖處理以及后臺(tái)長時(shí)間的模型預(yù)測(cè)任務(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é)束后,會(huì)將直方圖處理結(jié)果同時(shí)返回。
結(jié)果數(shù)組匯總處理。
import taskpool from '@ohos.taskpool';
@Concurrent
function imageProcessing(dataSlice: ArrayBuffer) {
// 步驟1: 具體的圖像處理操作及其他耗時(shí)操作
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文章
10908瀏覽量
213085 -
多線程
+關(guān)注
關(guān)注
0文章
278瀏覽量
20075 -
鴻蒙
+關(guān)注
關(guān)注
57文章
2393瀏覽量
43079 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
190瀏覽量
4547
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
HarmonyOS CPU與I/O密集型任務(wù)開發(fā)指導(dǎo)
![HarmonyOS <b class='flag-5'>CPU</b>與I/O<b class='flag-5'>密集型</b><b class='flag-5'>任務(wù)</b><b class='flag-5'>開發(fā)</b>指導(dǎo)](https://file1.elecfans.com//web2/M00/C0/EC/wKgaomXPT9aAPY5fAAIhtawiAa0789.png)
鴻蒙OS開發(fā)案例:【ArkTS類庫多線程CPU密集型任務(wù)Worker】
![<b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b>案例:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫</b><b class='flag-5'>多線程</b><b class='flag-5'>CPU</b><b class='flag-5'>密集型</b><b class='flag-5'>任務(wù)</b>Worker】](https://file1.elecfans.com/web2/M00/C6/97/wKgZomYKtMKAU2kRAAJCSRmMblo830.jpg)
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的對(duì)比(一)
鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫多線程TaskPool和Worker的對(duì)比(二)
什么時(shí)候要使用多線程
HarmonyOS CPU與I/O密集型任務(wù)開發(fā)指導(dǎo)
HarmonyOS語言基礎(chǔ)類庫開發(fā)指南上線啦!
鴻蒙APP開發(fā):【ArkTS類庫多線程】TaskPool和Worker的對(duì)比
![<b class='flag-5'>鴻蒙</b>APP<b class='flag-5'>開發(fā)</b>:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫</b><b class='flag-5'>多線程</b>】<b class='flag-5'>TaskPool</b>和Worker的對(duì)比](https://file1.elecfans.com/web2/M00/C5/CD/wKgZomYCdwyAIFf5AAB_7E1pFms943.jpg)
鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫多線程I/O密集型任務(wù)開發(fā)】
![<b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)例</b>:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫</b><b class='flag-5'>多線程</b>I/O<b class='flag-5'>密集型</b><b class='flag-5'>任務(wù)</b><b class='flag-5'>開發(fā)</b>】](https://file1.elecfans.com/web2/M00/C5/D1/wKgZomYChGOAUaiiAADe1d8SeRY102.jpg)
鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫多線程@Concurrent裝飾器校驗(yàn)并發(fā)函數(shù)】
![<b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)例</b>:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫</b><b class='flag-5'>多線程</b>@Concurrent裝飾器校驗(yàn)并發(fā)函數(shù)】](https://file1.elecfans.com/web2/M00/C5/D1/wKgZomYChGOAUaiiAADe1d8SeRY102.jpg)
評(píng)論