在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

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

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

使用Worker進行長時間數據分析

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

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

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

import worker from '@ohos.worker';

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

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

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

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

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

// 向Worker子線程發送訓練消息
workerInstance.postMessage({ 'type': 0 });
// 向Worker子線程發送預測消息
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()方法接收宿主線程發送的消息內容,并通過調用postMessage()方法向宿主線程發送消息。

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

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

let workerPort: ThreadWorkerGlobalScope = worker.workerPort;

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

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

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

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

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

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

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

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

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

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

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

    關注

    68

    文章

    11054

    瀏覽量

    216294
  • 多線程
    +關注

    關注

    0

    文章

    279

    瀏覽量

    20348
  • 鴻蒙OS
    +關注

    關注

    0

    文章

    191

    瀏覽量

    4918
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    HarmonyOS CPU與I/O密集型任務開發指導

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    CPU密集型任務開發指導

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

    I/O密集型任務開發指導

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

    HarmonyOS CPU與I/O密集型任務開發指導

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

    HarmonyOS語言基礎開發指南上線啦!

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

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

    TaskPool(任務池)和Worker的作用是為應用程序提供一個多線程的運行環境,用于處理耗時的計算任務或其他密集型
    的頭像 發表于 03-26 22:09 ?932次閱讀
    <b class='flag-5'>鴻蒙</b>APP<b class='flag-5'>開發</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開發:【ArkTS多線程】TaskPool和Worker的對比(2)

    創建Worker線程稱為宿主線程(不一定是主線程,工作線程也支持創建Worker
    的頭像 發表于 03-27 15:44 ?747次閱讀
    <b class='flag-5'>鴻蒙</b>APP<b class='flag-5'>開發</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開發實例:【ArkTS多線程I/O密集型任務開發

    使用異步并發可以解決單次I/O任務阻塞的問題,但是如果遇到I/O密集型任務,同樣會阻塞線程中其它任務的執行,這時需要使用
    的頭像 發表于 04-01 16:32 ?841次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發</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'>開發</b>】
    主站蜘蛛池模板: 国产成人1024精品免费 | 在线观看免费xx高清视频 | 一区二区三区四区电影 | 最新国产在线播放 | 免费播放视频 | 亚洲视频一区二区 | 亚洲人成电影在线观看网 | 国内精品免费视频精选在线观看 | 四虎最新网址 | 国产特黄一级一片免费 | 国产香蕉98碰碰久久人人 | 国产精品主播在线观看 | 日本一区二区三区视频在线观看 | 国产一区中文字幕 | 天堂在线最新版www中文 | 色视频在线观看完整免费版 | 国产一级爱c片免费播放 | 8888奇米四色在线 | 亚洲一卡2卡3卡4卡5卡乱码 | 色狠狠狠狠综合影视 | 四虎影院在线网址 | 国产亚洲一区二区三区啪 | 夜夜艹日日干 | 色噜噜狠狠狠狠色综合久一 | 巨臀中文字幕一区二区翘臀 | 最近国语剧情视频在线观看 | 精品国产一二三区在线影院 | 毛片免费高清免费 | 日韩欧美亚洲综合一区二区 | 色视频网站免费 | 午夜精品久久久久久久 | 一 级 黄 色 片生活片 | 欧美一级欧美一级高清 | 欧美成人午夜毛片免费影院 | 中国日韩欧美中文日韩欧美色 | 黄色三级视频网站 | 亚洲成人在线免费 | 偷偷要色偷偷 | 天天看a | 日本大片成人免费播放 | 激情丁香网 |