Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
3779b4ab
D
Docs
项目概览
OpenHarmony
/
Docs
1 年多 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
3779b4ab
编写于
9月 21, 2022
作者:
O
openharmony_ci
提交者:
Gitee
9月 21, 2022
浏览文件
操作
浏览文件
下载
差异文件
!9693 补充Worker使用说明信息
Merge pull request !9693 from wangzhaoyong/master
上级
1f0f30fb
f8bb4df8
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
44 addition
and
8 deletion
+44
-8
zh-cn/application-dev/reference/apis/js-apis-worker.md
zh-cn/application-dev/reference/apis/js-apis-worker.md
+44
-8
未找到文件。
zh-cn/application-dev/reference/apis/js-apis-worker.md
浏览文件 @
3779b4ab
...
...
@@ -29,7 +29,6 @@ Worker构造函数的选项信息,用于为Worker添加其他信息。
| 名称 | 参数类型 | 可读 | 可写 | 说明 |
| ------ | --------- | ---- | ---- | ---------------------- |
| type | "classic" | 是 | 是 | 按照指定方式执行脚本。 |
| name | string | 是 | 是 | Worker的名称。 |
| shared | boolean | 是 | 是 | Worker是否可以被分享。 |
...
...
@@ -691,23 +690,42 @@ parentPort.onerror = function(e){
}
```
## 其他说明
### 内存模型
Worker基于Actor并发模型实现。在Worker的交互流程中,JS主线程可以创建多个Worker子线程,各个Worker线程间相互隔离,并通过序列化传递对象,等到Worker线程完成计算任务,再把结果返回给主线程。
Actor并发模型的交互原理:各个Actor并发地处理主线程任务,每个Actor内部都有一个消息队列及单线程执行模块,消息队列负责接收主线程及其他Actor的请求,单线程执行模块则负责串行地处理请求、向其他Actor发送请求以及创建新的Actor。由于Actor采用的是异步方式,各个Actor之间相互隔离没有数据竞争,因此Actor可以高并发运行。
### 注意事项
-
Worker存在数量限制,当前支持最多同时存在7个Worker。
-
当Worker数量超出限制,会出现Error "Too many workers, the number of workers exceeds the maximum."。
-
主动销毁Worker可以调用新创建Worker对象的terminate()或parentPort.close()方法。
-
Worker的创建和销毁耗费性能,建议管理已创建的Worker并重复使用。
## 完整示例
### FA模型
```
js
// main.js(同级目录为例)
import
worker
from
'
@ohos.worker
'
;
// 主线程中创建Worker对象
const
workerInstance
=
new
worker
.
Worker
(
"
workers/worker.ts
"
);
// 创建js和ts文件都可以
// const workerInstance = new worker.Worker("workers/worker.js");
// 主线程向worker线程传递信息
workerInstance
.
postMessage
(
"
123
"
);
// 主线程接收worker线程信息
workerInstance
.
onmessage
=
function
(
e
)
{
// data:worker线程发送的信息
let
data
=
e
.
data
;
console
.
log
(
"
main.js onmessage
"
);
// 接收worker线程信息后执行terminate
// 销毁Worker对象
workerInstance
.
terminate
();
}
// 在调用terminate后,执行onexit
// 在调用terminate后,执行回调onexit
workerInstance
.
onexit
=
function
()
{
console
.
log
(
"
main.js terminate
"
);
}
...
...
@@ -715,14 +733,21 @@ workerInstance.onexit = function() {
```
js
// worker.js
import
worker
from
'
@ohos.worker
'
;
// 创建worker线程中与主线程通信的对象
const
parentPort
=
worker
.
parentPort
// worker线程接收主线程信息
parentPort
.
onmessage
=
function
(
e
)
{
// data:主线程发送的信息
let
data
=
e
.
data
;
console
.
log
(
"
worker.js onmessage
"
);
// worker线程向主线程发送信息
parentPort
.
postMessage
(
"
123
"
)
}
// worker线程发生error的回调
parentPort
.
onerror
=
function
(
e
)
{
console
.
log
(
"
worker.js onerror
"
);
}
...
...
@@ -741,14 +766,22 @@ build-profile.json5 配置 :
```
js
// main.js(以不同目录为例)
import
worker
from
'
@ohos.worker
'
;
// 主线程中创建Worker对象
const
workerInstance
=
new
worker
.
Worker
(
"
entry/ets/pages/workers/worker.ts
"
);
// 创建js和ts文件都可以
// const workerInstance = new worker.Worker("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线程信息后执行terminate
// 销毁Worker对象
workerInstance
.
terminate
();
}
// 在调用terminate后,执行onexit
...
...
@@ -759,14 +792,21 @@ workerInstance.onexit = function() {
```
js
// worker.js
import
worker
from
'
@ohos.worker
'
;
// 创建worker线程中与主线程通信的对象
const
parentPort
=
worker
.
parentPort
// worker线程接收主线程信息
parentPort
.
onmessage
=
function
(
e
)
{
// data:主线程发送的信息
let
data
=
e
.
data
;
console
.
log
(
"
worker.js onmessage
"
);
// worker线程向主线程发送信息
parentPort
.
postMessage
(
"
123
"
)
}
// worker线程发生error的回调
parentPort
.
onerror
=
function
(
e
)
{
console
.
log
(
"
worker.js onerror
"
);
}
...
...
@@ -781,7 +821,3 @@ build-profile.json5 配置:
}
}
```
## 注意事项
Worker存在数量限制,当前支持最多同时存在7个Worker。
当Worker数量超出限制,会出现Error "Too many workers, the number of workers exceeds the maximum."。
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录