使用異步并發(fā)可以解決單次I/O任務(wù)阻塞的問(wèn)題,但是如果遇到I/O密集型任務(wù),同樣會(huì)阻塞線程中其它任務(wù)的執(zhí)行,這時(shí)需要使用多線程并發(fā)能力來(lái)進(jìn)行解決。
I/O密集型任務(wù)的性能重點(diǎn)通常不在于CPU的處理能力,而在于I/O操作的速度和效率。這種任務(wù)通常需要頻繁地進(jìn)行磁盤讀寫、網(wǎng)絡(luò)通信等操作。此處以頻繁讀寫系統(tǒng)文件來(lái)模擬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;
}
開(kāi)始前熟悉鴻蒙文檔
| 鴻蒙OS開(kāi)發(fā) | 更多內(nèi)容↓點(diǎn)擊 | HarmonyOS與OpenHarmony技術(shù) |
|---|---|---|
| 鴻蒙技術(shù)文檔 | 《鴻蒙NEXT星河版開(kāi)發(fā)學(xué)習(xí)文檔》 |

使用TaskPool執(zhí)行包含密集I/O的并發(fā)函數(shù):通過(guò)調(diào)用execute()方法執(zhí)行任務(wù),并在回調(diào)中進(jìn)行調(diào)度結(jié)果處理。示例中的filePath1和filePath2的獲取方式請(qǐng)參見(jiàn)獲取應(yīng)用文件路徑。
import taskpool from '@ohos.taskpool';
let filePath1 = ...; // 應(yīng)用文件路徑
let filePath2 = ...;
// 使用TaskPool執(zhí)行包含密集I/O的并發(fā)函數(shù)
// 數(shù)組較大時(shí),I/O密集型任務(wù)任務(wù)分發(fā)也會(huì)搶占主線程,需要使用多線程能力
taskpool.execute(concurrentTest, [filePath1, filePath2]).then((ret) = > {
// 調(diào)度結(jié)果處理
console.info(`The result: ${ret}`);
})
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
多線程
+關(guān)注
關(guān)注
0文章
279瀏覽量
20967 -
鴻蒙
+關(guān)注
關(guān)注
60文章
2920瀏覽量
45565 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
193瀏覽量
5398
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
解析Linux的進(jìn)程、線程和協(xié)程
允許在單個(gè)線程內(nèi)實(shí)現(xiàn)多個(gè)協(xié)程的并發(fā)執(zhí)行。協(xié)程在執(zhí)行過(guò)程中可以主動(dòng)掛起和恢復(fù),這使得編寫高效的異步代碼變得更加容易。協(xié)程通常用于處理I/O密集型任務(wù)
發(fā)表于 12-22 11:00
多線程的系統(tǒng)
多線程系統(tǒng)的事件響應(yīng)也是在中斷中完成的,但事件的處理是在線程中完成的。在多線程系統(tǒng)中,線程跟中斷一樣,也具有優(yōu)先級(jí),優(yōu)先級(jí)高的線程會(huì)被優(yōu)先執(zhí)
發(fā)表于 12-08 07:55
Task任務(wù):LuatOS實(shí)現(xiàn)“任務(wù)級(jí)并發(fā)”的核心引擎
Task任務(wù)通過(guò)其強(qiáng)大的并發(fā)處理能力,使LuatOS能夠在單線程環(huán)境中模擬多線程執(zhí)行,通過(guò)協(xié)程的掛起與恢復(fù)機(jī)制,實(shí)現(xiàn)任務(wù)級(jí)的并行操作,顯著提升系統(tǒng)效能。 sys核心
CPU密集型任務(wù)開(kāi)發(fā)指導(dǎo)
CPU密集型任務(wù)是指需要占用系統(tǒng)資源處理大量計(jì)算能力的任務(wù),需要長(zhǎng)時(shí)間運(yùn)行,這段時(shí)間會(huì)阻塞線程其它事件的處理,不適宜放在主線程進(jìn)行。例如圖像
發(fā)表于 06-19 06:05
TaskPool和Worker的對(duì)比分析
askPool(任務(wù)池)和Worker的作用是為應(yīng)用程序提供一個(gè)多線程的運(yùn)行環(huán)境,用于處理耗時(shí)的計(jì)算任務(wù)或其他密集型任務(wù)。可以有效地避免這
發(fā)表于 06-18 06:43
什么是ArkTS?
、提高系統(tǒng)的整體性能,開(kāi)發(fā)者無(wú)需關(guān)心線程實(shí)例的生命周期。
Worker支持多線程并發(fā),支持Worker線程和宿主
發(fā)表于 06-17 06:24
鴻蒙5開(kāi)發(fā)寶藏案例分享---跨線程性能優(yōu)化指南
;>Worker</span>做多線程開(kāi)發(fā)時(shí),總遇到對(duì)象跨線程卡頓的問(wèn)題,原來(lái)鴻蒙早就提供了解決方案。下面結(jié)合代碼和實(shí)戰(zhàn)案例,帶你徹底玩轉(zhuǎn)性能優(yōu)化!
一、痛點(diǎn):跨
發(fā)表于 06-12 17:13
鴻蒙5開(kāi)發(fā)寶藏案例分享---切面編程實(shí)戰(zhàn)揭秘
鴻蒙切面編程(AOP)實(shí)戰(zhàn)指南:隱藏的寶藏功能大揭秘!
大家好!今天在翻鴻蒙開(kāi)發(fā)者文檔時(shí),意外發(fā)現(xiàn)了官方埋藏的「切面編程」寶藏案例!實(shí)際開(kāi)發(fā)中這些技巧能大幅提升效率,卻很少被提及。下面
發(fā)表于 06-12 16:21
鴻蒙5開(kāi)發(fā)寶藏案例分享---應(yīng)用并發(fā)設(shè)計(jì)
?** 鴻蒙并發(fā)編程實(shí)戰(zhàn)指南:解鎖ArkTS多線程黑科技**
嘿,開(kāi)發(fā)者朋友們! 今天給大家扒一扒鴻蒙官方文檔里藏著的并發(fā)編程寶藏—— 10
發(fā)表于 06-12 16:19
借助NVIDIA技術(shù)實(shí)現(xiàn)機(jī)器人裝配和接觸密集型操作
本期 NVIDIA 機(jī)器人研究與開(kāi)發(fā)摘要 (R2D2) 將探討 NVIDIA 研究中心針對(duì)機(jī)器人裝配任務(wù)的多種接觸密集型操作工作流,以及它們?nèi)绾谓鉀Q傳統(tǒng)固定自動(dòng)化在魯棒性、適應(yīng)性和可擴(kuò)展性等方面的關(guān)鍵挑戰(zhàn)。
進(jìn)程、線程、協(xié)程傻傻分不清?一文帶你徹底扒光它們的\"底褲\"!
in range(n))
?
async def io_bound_task(url):
# 模擬I/O密集型任務(wù)
async with aiohttp.ClientSessio
發(fā)表于 03-26 09:27
請(qǐng)問(wèn)如何在Python中實(shí)現(xiàn)多線程與多進(jìn)程的協(xié)作?
大家好!我最近在開(kāi)發(fā)一個(gè)Python項(xiàng)目時(shí),需要同時(shí)處理多個(gè)任務(wù),且每個(gè)任務(wù)需要不同的計(jì)算資源。我想通過(guò)多線程和多進(jìn)程的組合來(lái)實(shí)現(xiàn)并發(fā),但遇到了一些問(wèn)題。
具體來(lái)說(shuō),我有兩個(gè)
發(fā)表于 03-11 06:57
鴻蒙文件傳輸三方庫(kù)上線開(kāi)源鴻蒙社區(qū) 十行代碼實(shí)現(xiàn)大文件高速傳輸
近日,華為在OpenHarmony社區(qū)上線了“super_fast_file_trans”文件傳輸三方庫(kù)(以下簡(jiǎn)稱“SFFT”)。這一三方庫(kù)的推出,為開(kāi)發(fā)者提供了一套支持大文件多線程并
發(fā)表于 03-06 10:29
金倉(cāng)數(shù)據(jù)庫(kù)入選《2024年度專利密集型產(chǎn)品名單》
2月8日, 國(guó)家專利密集型產(chǎn)品備案認(rèn)定試點(diǎn)平臺(tái)公布了《2024年度專利密集型產(chǎn)品名單》,由電科金倉(cāng)自主研發(fā)的金倉(cāng)數(shù)據(jù)庫(kù)管理系統(tǒng)(KingbaseES)憑借扎實(shí)的技術(shù)積淀與市場(chǎng)驗(yàn)證,成功入選該名
鴻蒙OS開(kāi)發(fā)實(shí)例:【ArkTS類庫(kù)多線程I/O密集型任務(wù)開(kāi)發(fā)】
評(píng)論