使用異步并發(fā)可以解決單次I/O任務(wù)阻塞的問題,但是如果遇到I/O密集型任務(wù),同樣會阻塞線程中其它任務(wù)的執(zhí)行,這時需要使用多線程并發(fā)能力來進(jìn)行解決。
I/O密集型任務(wù)的性能重點(diǎn)通常不在于CPU的處理能力,而在于I/O操作的速度和效率。這種任務(wù)通常需要頻繁地進(jìn)行磁盤讀寫、網(wǎng)絡(luò)通信等操作。此處以頻繁讀寫系統(tǒng)文件來模擬I/O密集型并發(fā)任務(wù)的處理。
定義并發(fā)函數(shù),內(nèi)部密集調(diào)用I/O能力。
import fs from '@ohos.file.fs';
// 定義并發(fā)函數(shù),內(nèi)部密集調(diào)用I/O能力
@Concurrent
async function concurrentTest(fileList: string[]) {
// 寫入文件的實(shí)現(xiàn)
async function write(data, filePath) {
let file = await fs.open(filePath, fs.OpenMode.READ_WRITE);
await fs.write(file.fd, data);
fs.close(file);
}
// 循環(huán)寫文件操作
for (let i = 0; i < fileList.length; i++) {
write('Hello World!', fileList[i]).then(() = > {
console.info(`Succeeded in writing the file. FileList: ${fileList[i]}`);
}).catch((err) = > {
console.error(`Failed to write the file. Code is ${err.code}, message is ${err.message}`)
return false;
})
}
return true;
}
開始前熟悉鴻蒙文檔
鴻蒙OS開發(fā) | 更多內(nèi)容↓點(diǎn)擊 | HarmonyOS與OpenHarmony技術(shù) |
---|---|---|
鴻蒙技術(shù)文檔 | 《鴻蒙NEXT星河版開發(fā)學(xué)習(xí)文檔》 |
使用TaskPool執(zhí)行包含密集I/O的并發(fā)函數(shù):通過調(diào)用execute()方法執(zhí)行任務(wù),并在回調(diào)中進(jìn)行調(diào)度結(jié)果處理。示例中的filePath1和filePath2的獲取方式請參見獲取應(yīng)用文件路徑。
import taskpool from '@ohos.taskpool';
let filePath1 = ...; // 應(yīng)用文件路徑
let filePath2 = ...;
// 使用TaskPool執(zhí)行包含密集I/O的并發(fā)函數(shù)
// 數(shù)組較大時,I/O密集型任務(wù)任務(wù)分發(fā)也會搶占主線程,需要使用多線程能力
taskpool.execute(concurrentTest, [filePath1, filePath2]).then((ret) = > {
// 調(diào)度結(jié)果處理
console.info(`The result: ${ret}`);
})
-
多線程
+關(guān)注
關(guān)注
0文章
279瀏覽量
20243 -
鴻蒙
+關(guān)注
關(guān)注
57文章
2469瀏覽量
43642 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
190瀏覽量
4837
發(fā)布評論請先 登錄
相關(guān)推薦
進(jìn)程、線程、協(xié)程傻傻分不清?一文帶你徹底扒光它們的\"底褲\"!
請問如何在Python中實(shí)現(xiàn)多線程與多進(jìn)程的協(xié)作?
鴻蒙文件傳輸三方庫上線開源鴻蒙社區(qū) 十行代碼實(shí)現(xiàn)大文件高速傳輸
金倉數(shù)據(jù)庫入選《2024年度專利密集型產(chǎn)品名單》

《HarmonyOS第一課》煥新升級,賦能開發(fā)者快速掌握鴻蒙應(yīng)用開發(fā)
socket 多線程編程實(shí)現(xiàn)方法
HarmonyOS Next原生應(yīng)用開發(fā)-從TS到ArkTS的適配規(guī)則(十五)
HarmonyOS Next原生應(yīng)用開發(fā)-從TS到ArkTS的適配規(guī)則(十三)
鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡ArkTS相互操作(二)
鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡ArkTS相互操作(一)
動態(tài)線程池思想學(xué)習(xí)及實(shí)踐

評論