0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙OS開(kāi)發(fā)實(shí)例:【ArkTS類庫(kù)多線程I/O密集型任務(wù)開(kāi)發(fā)】

jf_46214456 ? 2024-04-01 16:32 ? 次閱讀

使用異步并發(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)行磁盤(pán)讀寫(xiě)、網(wǎng)絡(luò)通信等操作。此處以頻繁讀寫(xiě)系統(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[]) {
  // 寫(xiě)入文件的實(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)寫(xiě)文件操作
  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)擊HarmonyOSOpenHarmony技術(shù)
鴻蒙技術(shù)文檔《鴻蒙NEXT星河版開(kāi)發(fā)學(xué)習(xí)文檔》

搜狗高速瀏覽器截圖20240326151450.png

使用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}`);
})

本文參考引用HarmonyOS官方開(kāi)發(fā)文檔,基于API9。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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

    文章

    277

    瀏覽量

    19878
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2291

    瀏覽量

    42632
  • 鴻蒙OS
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    4346
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    鴻蒙開(kāi)發(fā):【線程模型】

    管理其他線程ArkTS引擎實(shí)例,例如使用TaskPool(任務(wù)池)創(chuàng)建任務(wù)或取消任務(wù)、啟動(dòng)和終
    的頭像 發(fā)表于 06-13 16:38 ?313次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開(kāi)發(fā)</b>:【<b class='flag-5'>線程</b>模型】

    鴻蒙OS開(kāi)發(fā)實(shí)例:【ArkTS庫(kù)單次I/O任務(wù)開(kāi)發(fā)

    Promise和async/await提供異步并發(fā)能力,適用于單次I/O任務(wù)的場(chǎng)景開(kāi)發(fā),本文以使用異步進(jìn)行單次文件寫(xiě)入為例來(lái)提供指導(dǎo)。
    的頭像 發(fā)表于 04-02 21:03 ?263次閱讀
    <b class='flag-5'>鴻蒙</b>原<b class='flag-5'>OS</b><b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>實(shí)例</b>:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫(kù)</b>單次<b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>任務(wù)</b><b class='flag-5'>開(kāi)發(fā)</b>】

    鴻蒙OS開(kāi)發(fā)實(shí)例:【ArkTS庫(kù)多線程@Concurrent裝飾器校驗(yàn)并發(fā)函數(shù)】

    在使用TaskPool時(shí),執(zhí)行的并發(fā)函數(shù)需要使用該裝飾器修飾,否則無(wú)法通過(guò)相關(guān)校驗(yàn)。從API version 9開(kāi)始,該裝飾器支持在ArkTS卡片中使用。
    的頭像 發(fā)表于 04-02 14:45 ?539次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>實(shí)例</b>:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>多線程</b>@Concurrent裝飾器校驗(yàn)并發(fā)函數(shù)】

    鴻蒙OS開(kāi)發(fā)實(shí)例:【ArkTS庫(kù)多線程CPU密集型任務(wù)TaskPool】

    CPU密集型任務(wù)是指需要占用系統(tǒng)資源處理大量計(jì)算能力的任務(wù),需要長(zhǎng)時(shí)間運(yùn)行,這段時(shí)間會(huì)阻塞線程其它事件的處理,不適宜放在主線程進(jìn)行。例如圖像
    的頭像 發(fā)表于 04-01 22:25 ?736次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>實(shí)例</b>:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>多線程</b>CPU<b class='flag-5'>密集型</b><b class='flag-5'>任務(wù)</b>TaskPool】

    鴻蒙OS開(kāi)發(fā)案例:【ArkTS庫(kù)多線程CPU密集型任務(wù)Worker】

    通過(guò)某地區(qū)提供的房?jī)r(jià)數(shù)據(jù)訓(xùn)練一個(gè)簡(jiǎn)易的房?jī)r(jià)預(yù)測(cè)模型,該模型支持通過(guò)輸入房屋面積和房間數(shù)量去預(yù)測(cè)該區(qū)域的房?jī)r(jià),模型需要長(zhǎng)時(shí)間運(yùn)行,房?jī)r(jià)預(yù)測(cè)需要使用前面的模型運(yùn)行結(jié)果,因此需要使用Worker。
    的頭像 發(fā)表于 04-01 21:55 ?941次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開(kāi)發(fā)</b>案例:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>多線程</b>CPU<b class='flag-5'>密集型</b><b class='flag-5'>任務(wù)</b>Worker】

    鴻蒙原生應(yīng)用開(kāi)發(fā)-ArkTS語(yǔ)言基礎(chǔ)庫(kù)多線程并發(fā)概述

    并發(fā)模型是用來(lái)實(shí)現(xiàn)不同應(yīng)用場(chǎng)景中并發(fā)任務(wù)的編程模型,常見(jiàn)的并發(fā)模型分為基于內(nèi)存共享的并發(fā)模型和基于消息通信的并發(fā)模型。 Actor并發(fā)模型作為基于消息通信并發(fā)模型的典型代表,不需要開(kāi)發(fā)者去面對(duì)鎖帶來(lái)
    發(fā)表于 03-28 14:35

    鴻蒙APP開(kāi)發(fā):【ArkTS庫(kù)多線程】TaskPool和Worker的對(duì)比

    TaskPool(任務(wù)池)和Worker的作用是為應(yīng)用程序提供一個(gè)多線程的運(yùn)行環(huán)境,用于處理耗時(shí)的計(jì)算任務(wù)或其他密集型任務(wù)。可以有效地避免這
    的頭像 發(fā)表于 03-26 22:09 ?527次閱讀
    <b class='flag-5'>鴻蒙</b>APP<b class='flag-5'>開(kāi)發(fā)</b>:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>多線程</b>】TaskPool和Worker的對(duì)比

    鴻蒙原生應(yīng)用開(kāi)發(fā)-ArkTS語(yǔ)言基礎(chǔ)庫(kù)多線程TaskPool和Worker的對(duì)比(二)

    TaskPool運(yùn)作機(jī)制 圖1 TaskPool運(yùn)作機(jī)制示意圖 TaskPool支持開(kāi)發(fā)者在主線程封裝任務(wù)拋給任務(wù)隊(duì)列,系統(tǒng)選擇合適的工作線程
    發(fā)表于 03-26 15:25

    鴻蒙原生應(yīng)用開(kāi)發(fā)-ArkTS語(yǔ)言基礎(chǔ)庫(kù)多線程TaskPool和Worker的對(duì)比(一)

    TaskPool(任務(wù)池)和Worker的作用是為應(yīng)用程序提供一個(gè)多線程的運(yùn)行環(huán)境,用于處理耗時(shí)的計(jì)算任務(wù)或其他密集型任務(wù)??梢杂行У乇苊膺@
    發(fā)表于 03-25 14:11

    鴻蒙原生應(yīng)用開(kāi)發(fā)-ArkTS語(yǔ)言基礎(chǔ)庫(kù)多線程I/O密集型任務(wù)開(kāi)發(fā)

    使用異步并發(fā)可以解決單次I/O任務(wù)阻塞的問(wèn)題,但是如果遇到I/O密集型
    發(fā)表于 03-21 14:57

    鴻蒙原生應(yīng)用開(kāi)發(fā)-ArkTS語(yǔ)言基礎(chǔ)庫(kù)多線程CPU密集型任務(wù)TaskPool

    CPU密集型任務(wù)是指需要占用系統(tǒng)資源處理大量計(jì)算能力的任務(wù),需要長(zhǎng)時(shí)間運(yùn)行,這段時(shí)間會(huì)阻塞線程其它事件的處理,不適宜放在主線程進(jìn)行。例如圖像
    發(fā)表于 03-19 14:14

    鴻蒙原生應(yīng)用開(kāi)發(fā)-ArkTS語(yǔ)言基礎(chǔ)庫(kù)概述

    ArkTS語(yǔ)言基礎(chǔ)庫(kù)是HarmonyOS系統(tǒng)上為應(yīng)用開(kāi)發(fā)者提供的常用基礎(chǔ)能力,主要包含能力如下圖所示。 1.提供異步并發(fā)和多線程并發(fā)的能
    發(fā)表于 03-05 15:42

    鴻蒙原生應(yīng)用開(kāi)發(fā)-ArkTS語(yǔ)言基礎(chǔ)庫(kù)單次I/O任務(wù)開(kāi)發(fā)

    Promise和async/await提供異步并發(fā)能力,適用于單次I/O任務(wù)的場(chǎng)景開(kāi)發(fā),本文以使用異步進(jìn)行單次文件寫(xiě)入為例來(lái)提供指導(dǎo)。 實(shí)現(xiàn)單次I
    發(fā)表于 03-04 14:07

    ArkTS語(yǔ)言基礎(chǔ)庫(kù)-解析

    ArkTS語(yǔ)言基礎(chǔ)庫(kù)是HarmonyOS系統(tǒng)上為應(yīng)用開(kāi)發(fā)者提供的常用基礎(chǔ)能力,主要包含能力如下圖所示。 圖1 ArkTS語(yǔ)言基礎(chǔ)
    發(fā)表于 02-20 16:44

    HarmonyOS CPU與I/O密集型任務(wù)開(kāi)發(fā)指導(dǎo)

    一、CPU密集型任務(wù)開(kāi)發(fā)指導(dǎo) CPU密集型任務(wù)是指需要占用系統(tǒng)資源處理大量計(jì)算能力的任務(wù),需要長(zhǎng)
    的頭像 發(fā)表于 02-18 10:17 ?913次閱讀
    HarmonyOS CPU與<b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>密集型</b><b class='flag-5'>任務(wù)</b><b class='flag-5'>開(kāi)發(fā)</b>指導(dǎo)