当前位置:   article > 正文

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

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

使用异步并发可以解决单次I/O任务阻塞的问题,但是如果遇到I/O密集型任务,同样会阻塞线程中其它任务的执行,这时需要使用多线程并发能力来进行解决。

I/O密集型任务的性能重点通常不在于CPU的处理能力,而在于I/O操作的速度和效率。这种任务通常需要频繁地进行磁盘读写、网络通信等操作。此处以频繁读写系统文件来模拟I/O密集型并发任务的处理。

定义并发函数,内部密集调用I/O能力。

  1. import fs from '@ohos.file.fs';
  2. // 定义并发函数,内部密集调用I/O能力
  3. @Concurrent
  4. async function concurrentTest(fileList: string[]) {
  5. // 写入文件的实现
  6. async function write(data, filePath) {
  7. let file = await fs.open(filePath, fs.OpenMode.READ_WRITE);
  8. await fs.write(file.fd, data);
  9. fs.close(file);
  10. }
  11. // 循环写文件操作
  12. for (let i = 0; i < fileList.length; i++) {
  13. write('Hello World!', fileList[i]).then(() => {
  14. console.info(`Succeeded in writing the file. FileList: ${fileList[i]}`);
  15. }).catch((err) => {
  16. console.error(`Failed to write the file. Code is ${err.code}, message is ${err.message}`)
  17. return false;
  18. })
  19. }
  20. return true;
  21. }

开始前熟悉鸿蒙文档

鸿蒙OS开发更多内容↓点击HarmonyOSOpenHarmony技术
鸿蒙技术文档《鸿蒙NEXT星河版开发学习文档》

搜狗高速浏览器截图20240326151450.png

使用TaskPool执行包含密集I/O的并发函数:通过调用execute()方法执行任务,并在回调中进行调度结果处理。示例中的filePath1和filePath2的获取方式请参见获取应用文件路径。

  1. import taskpool from '@ohos.taskpool';
  2. let filePath1 = ...; // 应用文件路径
  3. let filePath2 = ...;
  4. // 使用TaskPool执行包含密集I/O的并发函数
  5. // 数组较大时,I/O密集型任务任务分发也会抢占主线程,需要使用多线程能力
  6. taskpool.execute(concurrentTest, [filePath1, filePath2]).then((ret) => {
  7. // 调度结果处理
  8. console.info(`The result: ${ret}`);
  9. })

本文参考引用HarmonyOS官方开发文档,基于API9。

鸿蒙Next核心技术分享

1、鸿蒙基础知识←《鸿蒙NEXT星河版开发学习文档》

2、鸿蒙ArkUI←《鸿蒙NEXT星河版开发学习文档》

3、鸿蒙进阶技术←《鸿蒙NEXT星河版开发学习文档》

 4、鸿蒙就业高级技能←《鸿蒙NEXT星河版开发学习文档》 

 5、鸿蒙多媒体技术←《鸿蒙NEXT星河版开发学习文档》 

6、鸿蒙南向驱动开发←《鸿蒙NEXT星河版开发学习文档》  

7、鸿蒙南向内核设备开发←《鸿蒙NEXT星河版开发学习文档》  

 8、鸿蒙系统裁剪与移植←《鸿蒙NEXT星河版开发学习文档》  

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/360325
推荐阅读
相关标签
  

闽ICP备14008679号