论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
移动端开发
›
鸿蒙
›
鸿蒙 harmonyos 线程 并发 总结 async promise Taskpool ...
鸿蒙 harmonyos 线程 并发 总结 async promise Taskpool woker(三)多线程 ...
张国伟
金牌会员
|
2024-9-26 04:35:16
|
显示全部楼层
|
阅读模式
楼主
主题
945
|
帖子
945
|
积分
2835
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
Worker
Worker是与主线程并行的独立线程。创建Worker的线程称之为宿主线程,Worker自身的线程称之为Worker线程。创建Worker传入的url文件在Worker线程中执行,可以处置处罚耗时操作但不可以直接操作UI。
Worker主要作用是为应用步伐提供一个多线程的运行环境,可满足应用步伐在执行过程中与主线程分离,在背景线程中运行一个脚本操作耗时操作,极大避免类似于盘算麋集型或高延迟的使命阻塞主线程的运行。由于Worker一旦被创建则不会主动被烧毁,若不处于使命状态一直运行,在肯定程度上会造成资源的浪费,应及时关闭空闲的Worker。
当进行一系列同步使命时,保举使用Worker;而进行大量或调理点较为分散的独立使命时,不方便使用8个Worker去做负载管理,保举采用TaskPool。接下来将以图像直方图处置处罚以及背景长时间的模型预测使命分别进行举例。
Worker的上下文对象和主线程的上下文对象是不同的,Worker线程不支持UI操作
。
Worker留意事项
创建Worker时,传入的Worker.ts路径在不同版本有不同的规则,详情请参见文件路径留意事项。
Worker创建后必要手动管理生命周期,且最多同时运行的Worker子线程数目为8个,详情请参见生命周期留意事项。
Ability类型的Module支持使用Worker,Library类型的Module不支持使用Worker。
创建Worker不支持使用其他Module的Worker.ts文件,即不支持跨模块调用Worker。
由于不同线程中上下文对象是不同的,因此Worker线程只能使用线程安全的库,比方UI相关的非线程安全库不能使用。
序列化传输的数据量巨细限制为16MB。
创建Worker
由于华为主推Stage模型以是这里讲解Stage模型的Woker,构造函数必要传入Worker的路径(scriptURL),Worker文件存放位置默认路径为Worker文件所在目录与pages目录属于同级。
基于Stage模型工程目录布局,写法一的路径含义:
entry:module.json5文件中module的name属性对应值。
ets:用于存放ets源码,固定目录。
workers/MyWorker.ts:worker源文件在ets目录下的路径。
基于Stage模型工程目录布局,写法二的路径含义:
@bundle:固定标签。
bundlename:当前应用包名。
entryname:module.json5文件中module的name属性对应值。
ets:用于存放ets源码,固定目录。
workerdir/workerfile:worker源文件在ets目录下的路径,可不带文件后缀名。
在pages创建workers文件夹,在workers中创建worker文件,js、ts、ets都可以。本例创建的是ets,为了寻求代码统一。
worker通过worker.workerPort与主线程通讯,workerPort.onmessage接收来自主线程的数据,workerPort.postMessage向主线程发送消息。
// worker.ts
import worker from '@ohos.worker';
// 创建worker线程中与主线程通信的对象
const workerPort = worker.workerPort
// worker线程接收主线程信息
workerPort.onmessage = function(e) {
// data:主线程发送的信息
let data = e.data;
console.log("worker.ts onmessage"+data);
// worker线程向主线程发送信息
workerPort.postMessage("123")
}
// worker线程发生error的回调
workerPort.onerror= function(e) {
console.log("worker.ts onerror");
}
复制代码
配置Woker
必要在build-profile.json5中配置worker路径,配置在buildOption中的sourceOption中添加workers数组,既然是数组就可以添加多个worker
"buildOption": {
"sourceOption": {
"workers": [
"./src/main/ets/workers/worker.ets"
]
}
}
复制代码
调用Worker
worker.ThreadWorker("path/worker.ts")创建Woker对象,onmessage接收来worker的数据,postMessage向worker发送消息。
import worker from '@ohos.worker';
@Entry
@Component
struct Index {
@State image: PixelMap | undefined = undefined;
@State message: string = 'Hello World';
testWoker(){
// 主线程中创建Worker对象
const workerInstance = new worker.ThreadWorker("entry/ets/pages/workers/worker.ts");
// 创建js和ts文件都可以
// const workerInstance = new worker.ThreadWorker("entry/ets/pages/workers/worker.js");
// 主线程向worker线程传递信息
workerInstance.postMessage("123");
// 主线程接收worker线程信息
workerInstance.onmessage = function(e) {
// data:worker线程发送的信息
let data = e.data;
console.log("main.js onmessage");
// 销毁Worker对象
workerInstance.terminate();
}
// 在调用terminate后,执行onexit
workerInstance.onexit = function() {
console.log("main.js terminate");
}
}
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(()=>{
this.testWoker();
})
}
.width('100%')
}
.height('100%')
}
}
复制代码
今天就写到这,下一章讲一下worker其他特性,另有同步问题。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
张国伟
金牌会员
这个人很懒什么都没写!
楼主热帖
XAF新手入门 - 类型子系统(Types Info ...
JAVA 装箱拆箱--到底指什么呢? ...
MyBatis 查询数据库
[NOI2010] 航空管制
ThinkPHP5 远程命令执行漏洞
HarmonyOS(鸿蒙)开发一文入门 ...
RabbitMQ入门 -- 阿里云服务器安装Rabb ...
浅入浅出 1.7和1.8的 HashMap
基于 Dubbo Admin 实现同机房/区域优先 ...
来自学长的建议
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
云原生
移动端开发
linux
DevOps与敏捷开发
分布式数据库
Oracle
程序人生
Mysql
运维.售后
快速回复
返回顶部
返回列表