当前位置: 首页 > news >正文

香港网站 淘宝客百度有专做优化的没

香港网站 淘宝客,百度有专做优化的没,网页设计宣传海报素材,微信开发者平台官网登录【鸿蒙开发】多线程之Worker的使用 文章目录 【鸿蒙开发】多线程之Worker的使用前言一、Worker的介绍二、注意事项三、Worker使用示例1.新建一个Worker2.主线程使用Worker3.子线程Worker的使用 四、效果展示 前言 本文主要介绍了多线程的方法之一,使用Worker开启多…

【鸿蒙开发】多线程之Worker的使用


文章目录

  • 【鸿蒙开发】多线程之Worker的使用
  • 前言
  • 一、Worker的介绍
  • 二、注意事项
  • 三、Worker使用示例
    • 1.新建一个Worker
    • 2.主线程使用Worker
    • 3.子线程Worker的使用
  • 四、效果展示


前言

本文主要介绍了多线程的方法之一,使用Worker开启多线程,介绍了如何使用Worker。之前发布过TaskPool的使用,大家可以点击链接查看。
# 【鸿蒙开发】多线程之TaskPool的使用


一、Worker的介绍

Worker 是用于多线程并行任务处理的,能利用多核优势提效。在程序里,主线程管界面交互、任务调度,Worker 线程专注耗时计算或异步操作,像处理大数据、渲染复杂图形、密集网络请求时,让主线程保持灵敏,快速响应操作。Worker最多支持64个多线程,TaskPool没有这个限制。workder是通过onMessage和postMessage发消息实现主线程和子线程的通信的,TaskPool是通过参数的方式进行通信。

二、注意事项

1、及时关闭 Worker:开发者要清楚,Worker 完成任务后,得手动关闭,如果不关闭,资源会一直被占用,导致系统性能下降,甚至可能内存泄漏。
2、避免主线程卡顿:Worker 在多线程编程里很重要,主要负责处理耗时任务,像大数据处理、频繁网络请求等。它能帮主线程分担压力,让主线程专注用户交互与任务调度,快速响应操作
3、谨慎共享资源:虽然 Worker 线程和主线程能共享部分资源,但开发时不能过度依赖。多个 Worker 线程同时读写同一共享资源,容易混乱,导致数据出错、不一致,尽量给 Worker 配独立资源。

三、Worker使用示例

1.新建一个Worker

在这里插入图片描述

2.主线程使用Worker

Worker是通过onMessage和postMessage进行主线程和子线程通信的

  //worker的使用getWorker() {const work1 = new worker.ThreadWorker("entry/ets/workers/Worker.ets")work1.postMessage(123) //主线程给子线程发消息//主线程接收消息work1.onmessage = (event) => {// event.data-可以拿到子线程发送的消息AlertDialog.show({ message: '收到子线程发的消息' + JSON.stringify(event)})work1.terminate() //worker需要自毁或者再Workers那执行workerPort.close()}}

主线程完整代码:

import { worker } from '@kit.ArkTS';@Entry
@Component
struct Index {aboutToAppear(): void {this.getWorker()}//worker的使用getWorker() {const work1 = new worker.ThreadWorker("entry/ets/workers/Worker.ets")work1.postMessage(123) //主线程给子线程发消息//主线程接收消息work1.onmessage = (event) => {// event.data-可以拿到子线程发送的消息AlertDialog.show({ message: '收到子线程发的消息' + JSON.stringify(event) })work1.terminate() //worker需要自毁或者再Workers那执行workerPort.close()}}build() {RelativeContainer() {}.height('100%').width('100%')}
}

注意事项:本次演示代码路径
在这里插入图片描述
如果代码测试请求数据,注意在modules.json5中开启网络权限
在这里插入图片描述

3.子线程Worker的使用

子线程创建时会生成代码,我们在workerPort.onmessage中处理和主线程的通信即可。

workerPort.onmessage = async (e: MessageEvents) => {// e.data  可以拿到主线程传的消息console.log(' 接收到主线程发来的消息-----> ', e.data)const req = http.createHttp()const res = await req.request('https://xxx/home/banner')//子线程给主线程发消息--将请求结果返回workerPort.postMessage(JSON.stringify(res))// 如果主线程没有关闭worker,主线程可以让worker自焚// workerPort.close() //自毁
}

子线程完整代码:

import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS';
import { http } from '@kit.NetworkKit';const workerPort: ThreadWorkerGlobalScope = worker.workerPort;/*** Defines the event handler to be called when the worker thread receives a message sent by the host thread.* The event handler is executed in the worker thread.** @param e message data*/
workerPort.onmessage = async (e: MessageEvents) => {// e.data  可以拿到主线程传的消息console.log(' 接收到主线程发来的消息-----> ', e.data)// AlertDialog.show({ message: '接收到主线程发来的消息:' + e.data, alignment: DialogAlignment.Center })const req = http.createHttp()const res = await req.request('https://xxx/home/banner')//子线程给主线程发消息--将请求结果返回workerPort.postMessage(JSON.stringify(res))// 如果主线程没有关闭worker,主线程可以让worker自焚// workerPort.close() //自毁
}/*** Defines the event handler to be called when the worker receives a message that cannot be deserialized.* The event handler is executed in the worker thread.** @param e message data*/
workerPort.onmessageerror = (e: MessageEvents) => {
}/*** Defines the event handler to be called when an exception occurs during worker execution.* The event handler is executed in the worker thread.** @param e error message*/
workerPort.onerror = (e: ErrorEvent) => {
}

注意事项:
子线程在创建Worker时会自动生成文件,在生成的文件中处理逻辑。
在这里插入图片描述

四、效果展示

本次示例子线程给主线程发送了一个请求结果,我们用的是弹窗的形式展示
在这里插入图片描述
主线程给子线程发消息用的是控制台打印
在这里插入图片描述

http://www.15wanjia.com/news/18645.html

相关文章:

  • 扬州做网站的科技公司如何做好宣传推广
  • 一键网站建设台州关键词优化服务
  • 哈尔滨企业制作网站郑州网站建设制作公司
  • 建站之星怎么收费他达拉非的副作用和危害
  • 类似于美团的网站怎么做的新网络营销
  • 山东网络建站推广怎么做网站
  • 如何制作一个平台软件优化设计七年级上册数学答案
  • 微信公众号网站怎么做外贸网站有哪些
  • 南宁电子商务网站建设上海百度推广电话客服
  • 企业手机网站建设精英网络营销策划书2000字
  • 运输 织梦网站模板跟我学seo
  • 电商运营培训大概多少学费福州seo排名优化公司
  • wordpress文章阅读权限seo快速整站上排名教程
  • 2016做网站还赚钱吗灰色行业seo
  • 网站建设免费教程怎么做seo关键词优化
  • 医院营销型网站建设产品设计
  • 现在建一个网站一年费用只要几百元优化关键词可以选择哪个工具
  • 民治做网站联系电话上海百度推广优化公司
  • 如何法院网站建设seo资源
  • 网站代优化怎么下载app到手机上
  • node做网站后台淄博seo
  • 做电影平台网站怎么赚钱的18款禁用看奶app入口
  • 湖南网站制作收费标准网站关键词优化报价
  • 做网站公司宁波陕西百度推广的代理商
  • 呼和浩特网站建设宁波seo关键词如何优化
  • 实验一 电子商务网站建设与维护2024年4月新冠疫情结束了吗
  • 网站开发 承接网站ip查询
  • 做电影网站用的云盘优化大师软件下载
  • 自己做背景的网站南京seo报价
  • 合肥网站制作报贵州seo技术查询