女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

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

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-01 21:55 ? 次閱讀

使用Worker進(jìn)行長時間數(shù)據(jù)分析

通過某地區(qū)提供的房價數(shù)據(jù)訓(xùn)練一個簡易的房價預(yù)測模型,該模型支持通過輸入房屋面積和房間數(shù)量去預(yù)測該區(qū)域的房價,模型需要長時間運行,房價預(yù)測需要使用前面的模型運行結(jié)果,因此需要使用Worker。

1.DevEco Studio提供了Worker創(chuàng)建的模板,新建一個Worker線程,例如命名為“MyWorker”。

2.在主線程中通過調(diào)用ThreadWorker的constructor()方法創(chuàng)建Worker對象,當(dāng)前線程為宿主線程。

import worker from '@ohos.worker';

const workerInstance = new worker.ThreadWorker('entry/ets/workers/MyWorker.ts');

3.在宿主線程中通過調(diào)用onmessage()方法接收Worker線程發(fā)送過來的消息,并通過調(diào)用postMessage()方法向Worker線程發(fā)送消息。

例如向Worker線程發(fā)送訓(xùn)練和預(yù)測的消息,同時接收Worker線程發(fā)送回來的消息。

// 接收Worker子線程的結(jié)果
workerInstance.onmessage = function(e) {
  // data:Worker線程發(fā)送的信息
  let data = e.data;
  console.info('MyWorker.ts onmessage');
}

workerInstance.onerror = function (d) {
  // 接收Worker子線程的錯誤信息
}

// 向Worker子線程發(fā)送訓(xùn)練消息
workerInstance.postMessage({ 'type': 0 });
// 向Worker子線程發(fā)送預(yù)測消息
workerInstance.postMessage({ 'type': 1, 'value': [90, 5] });

4.在MyWorker.ts文件中綁定Worker對象,當(dāng)前線程為Worker線程。

import worker, { ThreadWorkerGlobalScope, MessageEvents, ErrorEvent } from '@ohos.worker';

let workerPort: ThreadWorkerGlobalScope = worker.workerPort;

5.在Worker線程中通過調(diào)用onmessage()方法接收宿主線程發(fā)送的消息內(nèi)容,并通過調(diào)用postMessage()方法向宿主線程發(fā)送消息。

例如在Worker線程中定義預(yù)測模型及其訓(xùn)練過程,同時與主線程進(jìn)行信息交互。

import worker, { ThreadWorkerGlobalScope, MessageEvents, ErrorEvent } from '@ohos.worker';

let workerPort: ThreadWorkerGlobalScope = worker.workerPort;

// 定義訓(xùn)練模型及結(jié)果 
let result;

// 定義預(yù)測函數(shù)
function predict(x) {
  return result[x];
}

// 定義優(yōu)化器訓(xùn)練過程
function optimize() {
  result = {};
}

// Worker線程的onmessage邏輯
workerPort.onmessage = function (e: MessageEvents) {
  let data = e.data
  // 根據(jù)傳輸?shù)臄?shù)據(jù)的type選擇進(jìn)行操作
  switch (data.type) {
    case 0:
    // 進(jìn)行訓(xùn)練
      optimize();
    // 訓(xùn)練之后發(fā)送主線程訓(xùn)練成功的消息
      workerPort.postMessage({ type: 'message', value: 'train success.' });
      break;
    case 1:
    // 執(zhí)行預(yù)測
      const output = predict(data.value);
    // 發(fā)送主線程預(yù)測的結(jié)果
      workerPort.postMessage({ type: 'predict', value: output });
      break;
    default:
      workerPort.postMessage({ type: 'message', value: 'send message is invalid' });
      break;
  }
}

在Worker線程中完成任務(wù)之后,執(zhí)行Worker線程銷毀操作。銷毀線程的方式主要有兩種:根據(jù)需要可以在宿主線程中對Worker線程進(jìn)行銷毀;也可以在Worker線程中主動銷毀Worker線程。

6.在宿主線程中通過調(diào)用onexit()方法定義Worker線程銷毀后的處理邏輯。

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

// Worker線程銷毀后,執(zhí)行onexit回調(diào)方法
workerInstance.onexit = function() {
  console.info("main thread terminate");
}```
鴻蒙OS開發(fā)HarmonyOSOpenHarmony技術(shù)
方式一:在宿主線程中通過調(diào)用terminate()方法銷毀Worker線程,并終止Worker接收消息。
// 銷毀Worker線程
workerInstance.terminate();

方式二:在Worker線程中通過調(diào)用close()方法主動銷毀Worker線程,并終止Worker接收消息。

// 銷毀線程
workerPort.close();

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

    關(guān)注

    68

    文章

    11031

    瀏覽量

    215938
  • 多線程
    +關(guān)注

    關(guān)注

    0

    文章

    279

    瀏覽量

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

    關(guān)注

    0

    文章

    191

    瀏覽量

    4873
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

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

    。 基于多線程并發(fā)機(jī)制處理CPU密集型任務(wù)可以提高CPU利用率,提升應(yīng)用程序響應(yīng)速度。 當(dāng)進(jìn)行一系列同步
    的頭像 發(fā)表于 02-18 10:17 ?1189次閱讀
    HarmonyOS <b class='flag-5'>CPU</b>與I/O<b class='flag-5'>密集型</b><b class='flag-5'>任務(wù)</b><b class='flag-5'>開發(fā)</b>指導(dǎo)

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

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

    ArkTS語言基礎(chǔ)-解析

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

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

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

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

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

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

    使用異步并發(fā)可以解決單次I/O任務(wù)阻塞的問題,但是如果遇到I/O密集型任務(wù),同樣會阻塞線程中其它任務(wù)的執(zhí)行,這時需要使用
    發(fā)表于 03-21 14:57

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

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

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

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

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

    是不同的,因此TaskPool工作線程只能使用線程安全的,例如UI相關(guān)的非線程安全不能使用。 序列化傳輸?shù)臄?shù)據(jù)量大小限制為16MB。 二
    發(fā)表于 03-27 16:26

    什么時候要使用多線程

    什么時候要使用多線程cpu密集型:(比如一個while( true ){ i++;})IO密集型:(比如一個從磁盤拷貝數(shù)據(jù)到另一個磁盤的拷貝進(jìn)程)1)計算
    發(fā)表于 09-06 07:25

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

    。 基于多線程并發(fā)機(jī)制處理CPU密集型任務(wù)可以提高CPU利用率,提升應(yīng)用程序響應(yīng)速度。 當(dāng)進(jìn)行一系列同步
    發(fā)表于 09-26 16:29

    HarmonyOS語言基礎(chǔ)開發(fā)指南上線啦!

    并發(fā)能力,適用于單次I/O任務(wù)開發(fā)場景。 ○ TaskPool和Worker提供多線程并發(fā)能力,適用于CPU
    發(fā)表于 10-18 16:36

    鴻蒙APP開發(fā):【ArkTS多線程】TaskPool和Worker的對比

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

    鴻蒙APP開發(fā):【ArkTS多線程】TaskPool和Worker的對比(2)

    創(chuàng)建Worker線程稱為宿主線程(不一定是主線程,工作線程也支持創(chuàng)建Worker
    的頭像 發(fā)表于 03-27 15:44 ?714次閱讀
    <b class='flag-5'>鴻蒙</b>APP<b class='flag-5'>開發(fā)</b>:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫</b><b class='flag-5'>多線程</b>】TaskPool和<b class='flag-5'>Worker</b>的對比(2)

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

    使用異步并發(fā)可以解決單次I/O任務(wù)阻塞的問題,但是如果遇到I/O密集型任務(wù),同樣會阻塞線程中其它任務(wù)的執(zhí)行,這時需要使用
    的頭像 發(fā)表于 04-01 16:32 ?795次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b>實例:【<b class='flag-5'>ArkTS</b><b class='flag-5'>類</b><b class='flag-5'>庫</b><b class='flag-5'>多線程</b>I/O<b class='flag-5'>密集型</b><b class='flag-5'>任務(wù)</b><b class='flag-5'>開發(fā)</b>】