TaskPool 和 Worker 的对比
作用:
- TaskPool(任务池)和 Worker 都为应用程序提供多线程运行环境,用于处理耗时的计算任务或其他密集型任务,避免阻塞主线程,提高系统性能。
实现特点对比:
- 内存模型:TaskPool 和 Worker 都提供线程间隔离,内存不共享。
- 参数传递机制:两者都采用结构化克隆算法进行序列化、反序列化,完成参数传递,并支持 ArrayBuffer 转移和 SharedArrayBuffer 共享。
- 参数传递:TaskPool 直接传递参数,无需封装,默认进行 transfer;Worker 需要自己封装消息对象作为唯一参数。
- 方法调用:TaskPool 直接将方法传入调用;Worker 在线程中进行消息解析并调用对应方法。
- 返回值:TaskPool 异步调用后默认返回;Worker 主动发送消息,需在 onmessage 解析赋值。
- 生命周期:TaskPool 自行管理生命周期;开发者自行管理 Worker 的数量及生命周期。
- 任务池个数上限:TaskPool 自动管理,无需配置;同个进程下,Worker 最多支持同时开启 8 个线程。
- 任务执行时长上限:两者均无限制。
- 设置任务的优先级:两者都不支持。
- 执行任务的取消:TaskPool 支持取消任务队列中等待的任务;Worker 不支持。
适用场景对比:
- TaskPool 适合独立任务维度,超长任务会被系统自动回收;Worker 适合长时间占据线程执行,需要主动管理线程生命周期的场景。
TaskPool 运作机制:
- 支持在主线程封装任务抛给任务队列,系统选择合适的工作线程进行任务分发及执行,并将结果返回给主线程。
Worker 运作机制:
- 创建 Worker 的线程称为宿主线程,Worker 子线程与宿主线程拥有独立的实例,通信基于消息传递。
注意事项:
- TaskPool 和 Worker 实现的任务函数需要使用装饰器标注,且入参需满足序列化支持的类型。
- 实现任务的函数需要使用装饰器@Concurrent标注,且仅支持在.ets文件中使用。
- Worker创建后需要手动管理生命周期,且最多同时运行的Worker子线程数量为8个。
- Ability类型的Module支持使用Worker,Library类型的Module不支持使用Worker。
- 创建Worker不支持使用其他Module的Worker.ts文件,即不支持跨模块调用Worker。
- 由于不同线程中上下文对象是不同的,两者工作线程只能使用线程安全的库。
- 序列化传输的数据量大小限制为 16MB。
TaskPool 和 Worker 的对比的更多相关文章
- 【转向Javascript系列】深入理解Web Worker
本文首发在alloyteam团队博客,链接地址http://www.alloyteam.com/2015/11/deep-in-web-worker/ 上一篇文章<从setTimeout说事件循 ...
- Web Worker是什么
.Web Worker是什么 Web Worker 是HTML5标准的一部分,这一规范定义了一套 API,它允许一段JavaScript程序运行在主线程之外的另外一个线程中.Web Worker 规范 ...
- Java并发包JUC核心原理解析
CS-LogN思维导图:记录CS基础 面试题 开源地址:https://github.com/FISHers6/CS-LogN JUC 分类 线程管理 线程池相关类 Executor.Executor ...
- [源码解析] 并行分布式任务队列 Celery 之 多进程模型
[源码解析] 并行分布式任务队列 Celery 之 多进程模型 目录 [源码解析] 并行分布式任务队列 Celery 之 多进程模型 0x00 摘要 0x01 Consumer 组件 Pool boo ...
- Web worker 与JS中异步编程的对比
0.从一道题说起 var t = true; setTimeout(function(){ t = false; }, 1000); while(t){ } alert('end'); 问,以上代码何 ...
- web worker 的传值方式以及耗时对比
背景 前一阵子开发的项目 pptx 导入, 由于自己的代码问题,引起了个性能问题,一个 40p 的 pptx 文件,转换成 json 数据,大概要耗时 60s+ ,虽然后面发现是某个使用频率非常高的函 ...
- 离线功能对比:service worker和applicationCache
SW 复杂,事件驱动,可以拦截请求,和缓存这些请求的响应数据,实现的效果更加灵活 AppCache 简单易用,声明式的将要缓存的文件清单声明在一个文件中.由于设计上的原因,它存在一些问题,导致难以运用 ...
- Service Worker,Web Worker,WebSocket的对比
Service Worker 处理网络请求的后台服务.适用于离线和后台同步数据或推送信息.不能直接和dom交互.通过postMessage方法交互. Web Worker 模拟多线程,允许复杂计算功能 ...
- 并发编程中.net与java的一些对比
Java在并发编程中进行使用java.util.concurrent.atomic来处理一些轻量级变量 如AtomicInteger AtomicBoolean等 .Net中则使用Interlocke ...
- Vue服务端渲染和Vue浏览器端渲染的性能对比
Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...
随机推荐
- 内部UI自动化测试培训之python基础
这个文档的由来是公司内部UI自动化测试培训的资料.部门为了减少测试工作量,准备做UI自动化测试.我写python,其他同事都是java,所以python基础和UI自动化测试selenium的培训就由我 ...
- Harbor 2.1.2 安装部署
环境 首先需要准备好 Docker + Docker-Compose 环境,Docker 在 CentOS 7.x 的安装教程请参考 这篇文章,后续文章假设你已经安装好了上述环境. 安装 标准安装 首 ...
- [VueJsDev] 目录列表
[VueJsDev] 目录列表 云服务器域名就一年,gitee上有不给发布,没办法 https://www.vuejsdev.com/ 还是迁移到博客园吧. 文章大部分是2022年9月份左右写的. 已 ...
- PlacementList must be sorted by first 8 bits of display_id 问题
问题暂未解决 [37484:0811/103448.115:ERROR:display_layout.cc(551)] PlacementList must be sorted by first 8 ...
- config.baseUrl.dev 变量 转移到 .env.local 中
config.baseUrl.dev 变量 转移到 .env.local 中 上下文 vue前端开发 问题 多人写代码的时候,会提交config.js里面的配置文件 解决方案 在根目录创建 .env. ...
- vscode 快速重新启动 reload Window
vscode 快速重新启动 reload Window ctrl + shift + P 输入 reload
- Ambiq Micro-AMA3B2KK-KBR芯片可穿戴产品解决方案开发之RTC时钟
一 RTC RTC的英文全称是Real-Time Clock,翻译过来是实时时钟芯片.绝大多数mcu芯片都集成了这个功能.在可穿戴产品中,时间往往是非常重要的因素,怎么让时间保持一直在运行,那就是 ...
- api-ms-win-crt-***.dll, api-ms-win-core-***.dll,win7以后kernel.dll,msvc*.dll的改变。api-ms-win-crt-***.dll 有问题就是 c++ redist 版本过低。
api-ms-win-crt-***-|1-1-0.dll是redistributable c++的一部分.以往只会因为msvc*NNN.dll才要去找对应的redistributable c++版本 ...
- Eclipse之各个版本的区别
经常用到的是前五个版本: Eclipse IDE for Java EE Developers:是为J2EE开发的版本: Eclipse Classic:是Eclipse的经典版本,没有安装任何插件, ...
- c++的IO类
CPP的IO类 继承图: IO对象不能拷贝或赋值 istream in = cin; //错! istream &in = cin; //正确! IO对象的状态 strm::good:读正常 ...