使用異步并發(fā)可以解決單次I/O任務阻塞的問題,但是如果遇到I/O密集型任務,同樣會阻塞線程中其它任務的執(zhí)行,這時需要使用多線程并發(fā)能力來進行解決。
I/O密集型任務的性能重點通常不在于CPU的處理能力,而在于I/O操作的速度和效率。這種任務通常需要頻繁地進行磁盤讀寫、網(wǎng)絡通信等操作。此處以頻繁讀寫系統(tǒng)文件來模擬I/O密集型并發(fā)任務的處理。
定義并發(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[]) {
// 寫入文件的實現(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)容↓點擊 | HarmonyOS與OpenHarmony技術 |
---|---|---|
鴻蒙技術文檔 | 《鴻蒙NEXT星河版開發(fā)學習文檔》 |
使用TaskPool執(zhí)行包含密集I/O的并發(fā)函數(shù):通過調(diào)用execute()方法執(zhí)行任務,并在回調(diào)中進行調(diào)度結(jié)果處理。示例中的filePath1和filePath2的獲取方式請參見獲取應用文件路徑。
import taskpool from '@ohos.taskpool';
let filePath1 = ...; // 應用文件路徑
let filePath2 = ...;
// 使用TaskPool執(zhí)行包含密集I/O的并發(fā)函數(shù)
// 數(shù)組較大時,I/O密集型任務任務分發(fā)也會搶占主線程,需要使用多線程能力
taskpool.execute(concurrentTest, [filePath1, filePath2]).then((ret) = > {
// 調(diào)度結(jié)果處理
console.info(`The result: ${ret}`);
})
-
多線程
+關注
關注
0文章
279瀏覽量
20447 -
鴻蒙
+關注
關注
60文章
2620瀏覽量
44063 -
鴻蒙OS
+關注
關注
0文章
191瀏覽量
4998
發(fā)布評論請先 登錄
CPU密集型任務開發(fā)指導
TaskPool和Worker的對比分析
什么是ArkTS?
鴻蒙5開發(fā)寶藏案例分享---跨線程性能優(yōu)化指南
鴻蒙5開發(fā)寶藏案例分享---切面編程實戰(zhàn)揭秘
鴻蒙5開發(fā)寶藏案例分享---應用并發(fā)設計
借助NVIDIA技術實現(xiàn)機器人裝配和接觸密集型操作

進程、線程、協(xié)程傻傻分不清?一文帶你徹底扒光它們的\"底褲\"!
請問如何在Python中實現(xiàn)多線程與多進程的協(xié)作?
鴻蒙文件傳輸三方庫上線開源鴻蒙社區(qū) 十行代碼實現(xiàn)大文件高速傳輸
金倉數(shù)據(jù)庫入選《2024年度專利密集型產(chǎn)品名單》

評論