使用异步并发可以解决单次I/O任务阻塞的问题,但是如果遇到I/O密集型任务,同样会阻塞线程中其它任务的执行,这时需要使用多线程并发能力来进行解决。
I/O密集型任务的性能重点通常不在于CPU的处理能力,而在于I/O操作的速度和效率。这种任务通常需要频繁地进行磁盘读写、网络通信等操作。此处以频繁读写系统文件来模拟I/O密集型并发任务的处理。
定义并发函数,内部密集调用I/O能力。
import fs from '@ohos.file.fs';
// 定义并发函数,内部密集调用I/O能力
@Concurrent
async function concurrentTest(fileList: string[]) {
// 写入文件的实现
async function write(data, filePath) {
let file = await fs.open(filePath, fs.OpenMode.READ_WRITE);
await fs.write(file.fd, data);
fs.close(file);
}
// 循环写文件操作
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开发 | 更多内容↓点击 | HarmonyOS与OpenHarmony技术 |
|---|---|---|
| 鸿蒙技术文档 | 《鸿蒙NEXT星河版开发学习文档》 |

使用TaskPool执行包含密集I/O的并发函数:通过调用execute()方法执行任务,并在回调中进行调度结果处理。示例中的filePath1和filePath2的获取方式请参见获取应用文件路径。
import taskpool from '@ohos.taskpool';
let filePath1 = ...; // 应用文件路径
let filePath2 = ...;
// 使用TaskPool执行包含密集I/O的并发函数
// 数组较大时,I/O密集型任务任务分发也会抢占主线程,需要使用多线程能力
taskpool.execute(concurrentTest, [filePath1, filePath2]).then((ret) = > {
// 调度结果处理
console.info(`The result: ${ret}`);
})
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
多线程
+关注
关注
0文章
279浏览量
20911 -
鸿蒙
+关注
关注
60文章
2853浏览量
45340 -
鸿蒙OS
+关注
关注
0文章
192浏览量
5301
发布评论请先 登录
相关推荐
热点推荐
Linux多线程对比单线程的优势
:「资源利用率」:通过多线程,可以更有效地利用CPU资源,特别是多核CPU。「并行处理」:线程允许同时执行多个任务,提高程序的执行效率。「简化设计」:使用线程可以简化程序设计,因为
发表于 12-01 06:11
Task任务:LuatOS实现“任务级并发”的核心引擎
Task任务通过其强大的并发处理能力,使LuatOS能够在单线程环境中模拟多线程执行,通过协程的挂起与恢复机制,实现任务级的并行操作,显著提升系统效能。 sys核心
TaskPool和Worker的对比分析
askPool(任务池)和Worker的作用是为应用程序提供一个多线程的运行环境,用于处理耗时的计算任务或其他密集型任务。可以有效地避免这
发表于 06-18 06:43
鸿蒙5开发宝藏案例分享---跨线程性能优化指南
;>Worker</span>做多线程开发时,总遇到对象跨线程卡顿的问题,原来鸿蒙早就提供了解决方案。下面结合代码和实战案例,带你彻底玩转性能优化!
一、痛点:跨
发表于 06-12 17:13
鸿蒙5开发宝藏案例分享---切面编程实战揭秘
鸿蒙切面编程(AOP)实战指南:隐藏的宝藏功能大揭秘!
大家好!今天在翻鸿蒙开发者文档时,意外发现了官方埋藏的「切面编程」宝藏案例!实际开发中这些技巧能大幅提升效率,却很少被提及。下面
发表于 06-12 16:21
鸿蒙5开发宝藏案例分享---应用并发设计
?** 鸿蒙并发编程实战指南:解锁ArkTS多线程黑科技**
嘿,开发者朋友们! 今天给大家扒一扒鸿蒙官方文档里藏着的并发编程宝藏—— 10
发表于 06-12 16:19
借助NVIDIA技术实现机器人装配和接触密集型操作
本期 NVIDIA 机器人研究与开发摘要 (R²D²) 将探讨 NVIDIA 研究中心针对机器人装配任务的多种接触密集型操作工作流,以及它们如何解决传统固定自动化在鲁棒性、适应性和可扩展性等方面的关键挑战。
进程、线程、协程傻傻分不清?一文带你彻底扒光它们的\"底裤\"!
in range(n))
async def io_bound_task(url):
# 模拟I/O密集型任务
async with aiohttp.ClientSessio
发表于 03-26 09:27
请问如何在Python中实现多线程与多进程的协作?
大家好!我最近在开发一个Python项目时,需要同时处理多个任务,且每个任务需要不同的计算资源。我想通过多线程和多进程的组合来实现并发,但遇到了一些问题。
具体来说,我有两个
发表于 03-11 06:57
鸿蒙文件传输三方库上线开源鸿蒙社区 十行代码实现大文件高速传输
近日,华为在OpenHarmony社区上线了“super_fast_file_trans”文件传输三方库(以下简称“SFFT”)。这一三方库的推出,为开发者提供了一套支持大文件多线程并
发表于 03-06 10:29
金仓数据库入选《2024年度专利密集型产品名单》
2月8日, 国家专利密集型产品备案认定试点平台公布了《2024年度专利密集型产品名单》,由电科金仓自主研发的金仓数据库管理系统(KingbaseES)凭借扎实的技术积淀与市场验证,成功入选该名
《HarmonyOS第一课》焕新升级,赋能开发者快速掌握鸿蒙应用开发
能开发轻量型APP或元服务。课程涵盖Stage模型进阶、多线程编程、组件状态管理等核心技能,让开发者能独立完成多个模块业务及多个子系统等复杂模块开发
发表于 01-02 14:24

鸿蒙OS开发实例:【ArkTS类库多线程I/O密集型任务开发】
评论