一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

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

使用異步并發(fā)可以解決單次I/O任務(wù)阻塞的問題,但是如果遇到I/O密集型任務(wù),同樣會阻塞線程中其它任務(wù)的執(zhí)行,這時需要使用多線程并發(fā)能力來進(jìn)行解決。

I/O密集型任務(wù)的性能重點(diǎn)通常不在于CPU的處理能力,而在于I/O操作的速度和效率。這種任務(wù)通常需要頻繁地進(jìn)行磁盤讀寫、網(wǎng)絡(luò)通信等操作。此處以頻繁讀寫系統(tǒng)文件來模擬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;
}

開始前熟悉鴻蒙文檔

鴻蒙OS開發(fā)更多內(nèi)容↓點(diǎn)擊HarmonyOSOpenHarmony技術(shù)
鴻蒙技術(shù)文檔《鴻蒙NEXT星河版開發(fā)學(xué)習(xí)文檔》

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

使用TaskPool執(zhí)行包含密集I/O的并發(fā)函數(shù):通過調(diào)用execute()方法執(zhí)行任務(wù),并在回調(diào)中進(jìn)行調(diào)度結(jié)果處理。示例中的filePath1和filePath2的獲取方式請參見獲取應(yīng)用文件路徑。

import taskpool from '@ohos.taskpool';

let filePath1 = ...; // 應(yīng)用文件路徑
let filePath2 = ...;

// 使用TaskPool執(zhí)行包含密集I/O的并發(fā)函數(shù)
// 數(shù)組較大時,I/O密集型任務(wù)任務(wù)分發(fā)也會搶占主線程,需要使用多線程能力
taskpool.execute(concurrentTest, [filePath1, filePath2]).then((ret) = > {
  // 調(diào)度結(jié)果處理
  console.info(`The result: ${ret}`);
})

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 多線程
    +關(guān)注

    關(guān)注

    0

    文章

    279

    瀏覽量

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

    關(guān)注

    57

    文章

    2469

    瀏覽量

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

    關(guān)注

    0

    文章

    190

    瀏覽量

    4837
收藏 人收藏

    評論

    相關(guā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

    請問如何在Python中實(shí)現(xiàn)多線程與多進(jìn)程的協(xié)作?

    大家好!我最近在開發(fā)一個Python項(xiàng)目時,需要同時處理多個任務(wù),且每個任務(wù)需要不同的計(jì)算資源。我想通過多線程和多進(jìn)程的組合來實(shí)現(xiàn)并發(fā),但遇到了一些問題。 具體來說,我有兩個
    發(fā)表于 03-11 06:57

    鴻蒙文件傳輸三方上線開源鴻蒙社區(qū) 十行代碼實(shí)現(xiàn)大文件高速傳輸

    近日,華為在OpenHarmony社區(qū)上線了“super_fast_file_trans”文件傳輸三方(以下簡稱“SFFT”)。這一三方的推出,為開發(fā)者提供了一套支持大文件多線程
    發(fā)表于 03-06 10:29

    金倉數(shù)據(jù)入選《2024年度專利密集型產(chǎn)品名單》

    2月8日, 國家專利密集型產(chǎn)品備案認(rèn)定試點(diǎn)平臺公布了《2024年度專利密集型產(chǎn)品名單》,由電科金倉自主研發(fā)的金倉數(shù)據(jù)管理系統(tǒng)(KingbaseES)憑借扎實(shí)的技術(shù)積淀與市場驗(yàn)證,成功入選該名
    的頭像 發(fā)表于 02-23 15:42 ?296次閱讀
    金倉數(shù)據(jù)<b class='flag-5'>庫</b>入選《2024年度專利<b class='flag-5'>密集型</b>產(chǎn)品名單》

    《HarmonyOS第一課》煥新升級,賦能開發(fā)者快速掌握鴻蒙應(yīng)用開發(fā)

    開發(fā)輕量APP或元服務(wù)。課程涵蓋Stage模型進(jìn)階、多線程編程、組件狀態(tài)管理等核心技能,讓開發(fā)者能獨(dú)立完成多個模塊業(yè)務(wù)及多個子系統(tǒng)等復(fù)雜模塊開發(fā)
    發(fā)表于 01-02 14:24

    socket 多線程編程實(shí)現(xiàn)方法

    是指在同一個進(jìn)程中運(yùn)行多個線程,每個線程可以獨(dú)立執(zhí)行任務(wù)線程共享進(jìn)程的資源,如內(nèi)存空間和文件句柄,但每個線程有自己的程序計(jì)數(shù)器、寄存器集合
    的頭像 發(fā)表于 11-12 14:16 ?800次閱讀

    怎么在JAVA中確定線性池大小

    在JAVA中確定線性池大小,分別介紹CPU密集型任務(wù)I/O密集型任務(wù)及其處理方法。
    的頭像 發(fā)表于 10-24 14:02 ?380次閱讀

    HarmonyOS Next原生應(yīng)用開發(fā)-從TS到ArkTS的適配規(guī)則(十五)

    ) { console.log(a[i]); } ArkTS let a: string[] = [\'1.0\', \'2.0\', \'3.0\']; for (let i = 0; i
    發(fā)表于 08-19 16:13

    HarmonyOS Next原生應(yīng)用開發(fā)-從TS到ArkTS的適配規(guī)則(十三)

    ,instanceof運(yùn)算符的左操作數(shù)不能是類型,必須是對象的實(shí)例。二、不支持in運(yùn)算符 規(guī)則:arkts-no-in 級別:錯誤 由于在ArkTS中,對象布局在編譯時是已知的并且在運(yùn)行時無法修改,因此
    發(fā)表于 08-12 09:42

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡ArkTS相互操作(二)

    = data.getId() console.log(\"id is \" + id) 十二、ArkTS 互操作和倉頡多線程 ArkTS 是單線程執(zhí)行的虛擬機(jī),在運(yùn)行時上沒有對
    發(fā)表于 08-01 11:01

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡ArkTS相互操作(一)

    ArkTS 運(yùn)行時接口,為用戶提供級別的 ArkTS 互操作能力。一、使用場景: 1.在 ArkTS 應(yīng)用開發(fā)倉頡模塊:把用戶倉頡代碼封
    發(fā)表于 07-31 17:43

    鴻蒙開發(fā)線程模型

    FA模型下的線程主要有如下三
    的頭像 發(fā)表于 06-24 17:27 ?610次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:<b class='flag-5'>線程</b>模型

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

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

    動態(tài)線程池思想學(xué)習(xí)及實(shí)踐

    ://www.javadoop.com/post/java-thread-pool? 引言 在后臺項(xiàng)目開發(fā)過程中,我們常常借助線程池來實(shí)現(xiàn)多線程任務(wù),以此提升系統(tǒng)的吞吐率和響應(yīng)性;而
    的頭像 發(fā)表于 06-13 15:43 ?1396次閱讀
    動態(tài)<b class='flag-5'>線程</b>池思想學(xué)習(xí)及實(shí)踐

    鴻蒙實(shí)戰(zhàn)開發(fā)-如何安全和高效的使用N-API開發(fā)Native模塊

    、CPU密集型任務(wù)需要異步處理, 否則會造成主線程的阻塞。N-API 支持異步能力,允許應(yīng)用程序在執(zhí)行某個耗時任務(wù)時不會被阻塞,而是繼續(xù)執(zhí)行其他任務(wù)
    發(fā)表于 05-09 15:55