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

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-01 21:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

import worker from '@ohos.worker';

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

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

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

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

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

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

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

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

let workerPort: ThreadWorkerGlobalScope = worker.workerPort;

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

例如在Worker線程中定義預測模型及其訓練過程,同時與主線程進行信息交互。

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

let workerPort: ThreadWorkerGlobalScope = worker.workerPort;

// 定義訓練模型及結果 
let result;

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

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

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

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

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

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

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

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

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

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

    關注

    68

    文章

    11062

    瀏覽量

    216454
  • 多線程
    +關注

    關注

    0

    文章

    279

    瀏覽量

    20369
  • 鴻蒙OS
    +關注

    關注

    0

    文章

    191

    瀏覽量

    4942
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    HarmonyOS CPU與I/O密集型任務開發(fā)指導

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

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

    CPU密集型任務是指需要占用系統(tǒng)資源處理大量計算能力的任務,需要長時間運行,這段時間會阻塞線程其它事件的處理,不適宜放在主
    的頭像 發(fā)表于 04-01 22:25 ?1166次閱讀
    <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'>任務</b>TaskPool】

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

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

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

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

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

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

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

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

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

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

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

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

    CPU密集型任務開發(fā)指導

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

    I/O密集型任務開發(fā)指導

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

    HarmonyOS CPU與I/O密集型任務開發(fā)指導

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

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

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

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

    TaskPool(任務池)和Worker的作用是為應用程序提供一個多線程的運行環(huán)境,用于處理耗時的計算任務或其他密集型
    的頭像 發(fā)表于 03-26 22:09 ?937次閱讀
    <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 ?750次閱讀
    <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密集型任務開發(fā)

    使用異步并發(fā)可以解決單次I/O任務阻塞的問題,但是如果遇到I/O密集型任務,同樣會阻塞線程中其它任務的執(zhí)行,這時需要使用
    的頭像 發(fā)表于 04-01 16:32 ?850次閱讀
    <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'>任務</b><b class='flag-5'>開發(fā)</b>】