ArkTs-TaskPool和Worker的使用

TaskPool和Worker的区别

实现TaskPoolWorker
内存模型线程间隔离,内存不共享。线程间隔离,内存不共享。
参数传递机制

采用标准的结构化克隆算法(Structured Clone)进行序列化、反序列化,完成参数传递。

支持ArrayBuffer转移和SharedArrayBuffer共享。

采用标准的结构化克隆算法(Structured Clone)进行序列化、反序列化,完成参数传递。

支持ArrayBuffer转移和SharedArrayBuffer共享。

参数传递直接传递,无需封装,默认进行transfer。消息对象唯一参数,需要自己封装。
方法调用直接将方法传入调用。在Worker线程中进行消息解析并调用对应方法。
返回值异步调用后默认返回。主动发送消息,需在onmessage解析赋值。
生命周期TaskPool自行管理生命周期,无需关心任务负载高低。开发者自行管理Worker的数量及生命周期
任务池个数上限自动管理,无需配置。同个进程下,最多支持同时开启8个Worker线程。
任务执行时长上限3分钟(不包含Promise和async/await异步调用的耗时,例如网络下载、文件读写等I/O任务的耗时)。无限制。
设置任务的优先级支持配置任务优先级。不支持。
执行任务的取消支持取消已经发起的任务。不支持。
线程复用支持。不支持。
任务延时执行支持。不支持。
设置任务依赖关系支持。不支持。
串行队列支持。不支持。
任务组支持。不支持。

性能优化:

  •  启动问题
  • 多线程不会造成卡死的问题,同时做多件事情
  • 主线程负责UI渲染-数据加载

taskPool

    1、excute执行函数, 必须执行被Concurrent修饰的方法
    2、 必须是全局方法--(该修饰符必须在全局定义,不支持在组件内部定义)
    3、该方法中 不能用导入的方法
    4、 不能直接返回,要求先把事情做完,再返回结果,不能返回一个没有结果的耗时任务

import { http } from '@kit.NetworkKit'
import { taskpool, worker } from '@kit.ArkTS'@Concurrent
async function getMyInfo() {/*1、 必须执行被Concurrent修饰的方法2、 必须是全局方法3、该方法中 不能用导入的方法4、 不能直接返回,要求先把事情做完,再返回结果,不能返回一个没有结果的耗时任务*/// return http.createHttp().request("https://****")const result = await http.createHttp().request("https://toutiao.itheima.net/v1_0/channels")return result
}@Entry
@Component
struct Home {aboutToAppear(): void {// 开启多线程,请求我的数据const task1 = new taskpool.Task(getMyInfo)taskpool.execute(task1).then(res => {//使用场景:在tab1页面把tab4页面的数据请求回来存到全局,tab4的页面直接获取数据,显示就会更丝滑AlertDialog.show({ message: JSON.stringify(res, null, 2) })})}build() {}
}

Worker

1.在ets下面新建一个worker 
2.写入worker的路径的写法规则如下

 

注意

传值的时候,必须传可被序列化的数据

被@State、@Link @Provide等修饰的变量,都不可被序列化,因为都被包了一层Proxy

线程安全问题

如:同一时间多个线程处理同一个文件

规定:必须使用线程安全的库

自行控制 如:打标记

比如声明一个当前文件是否正在编辑的状态,isEdit

isEdit==true;正在编辑状态,等待

isEdit==false;置为true,编辑..完成后置为false

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/23583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python调用excel的demo

在本地安装Pycharm之后,新建工程,在main.py中键入如下代码,即可实现Python调用excel: import pandas as pd sheet pd.read_excel(test.xlsx) data sheet.loc[0].values print("读取指定行的数据:\n{0}".format(data)) 第一次编…

IT学习笔记--Flink

概况: Flink 是 Apache 基金会旗下的一个开源大数据处理框架。目前,Flink 已经成为各大公司大数据实时处理的发力重点,特别是国内以阿里为代表的一众互联网大厂都在全力投入,为 Flink 社区贡献了大量源码。 Apache Flink 是一个…

Vscode发生鼠标悬停正在加载、无法跳转和提示词的问题

Vscode发生鼠标悬停正在加载、无法跳转和提示词的问题 查看python语言服务器的日志,确定问题。 我的问题是加载的vscode 目录下存在一个很大的数据集目录,导致无法正常工作。 解决办法: 在vscode的pylance设置中,排除对应的目…

深入理解 Spring 容器:原始 Bean 的生成过程

引言: Spring 框架的核心功能之一是它的 IoC(控制反转)容器,它负责创建、配置和组装 Bean。在 Spring 应用程序中,Bean 是对象实例,由 Spring 容器负责其生命周期和依赖关系。本文将深入探讨 Spring 容器中…

使用 PlayCanvas 创建带有后处理效果的 3D 场景

本文由ScriptEcho平台提供技术支持 项目地址:传送门 使用 PlayCanvas 创建带有后处理效果的 3D 场景 应用场景介绍 本代码演示了如何使用 PlayCanvas 创建一个带有后处理效果的 3D 场景。用户可以在场景中查看一个棋盘模型,并使用后处理效果为场景添…

达梦 执行查询语句时报[-544]:Out of sort buf space

达梦数据库有时执行SQL中有时报[-544]:Out of sort buf space, try to adjust SORT_BUF_GLOBAL_SIZE, SORT_BUF_SIZE, SORT_BLK_SIZE. 第一反应是这条语句占用排序区太大。但真实原因是前面执行的语句耗光了全局排序区,后面SQL任何小的排序操作都会报这个错误从而执…

freeRTOS中使用cJSON死机的问题

问题描述 在freeRTOS中使用cJSON来处理PC通过串口发送的信息,但是在串口接收处理任务中调用cJSON处理的函数后会出现死机的问题 // 处理PC的信息 void ProcessPCData(uint8_t* data, uint32_t len) {int functionCode 0;cJSON* json NULL;printf("Start Pr…

天润融通助力浪鲸卫浴,智能化革新引领客户服务新高度

头部家装品牌如何用优质服务抓住客户? 每年初春,万物复苏的同时,家装市场也正式进入旺季。 因为春天气温回升,潮气逐渐散去,开始进入最适合施工的季节,木材不易变形、油漆不易起皮,再加上春季…

算法金 | 再见!!!KNN

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 KNN算法的工作原理简单直观,易于理解和实现,这使得它在各种应用场景中备受青睐。 我们将深入探讨KNN算法&…

Easy 同学:AI 时代将加速计算机专业和程序员职业的分化

一、原贴 2024 年 6 月 5 日 拥有 60多万粉丝的方糖气球(ftqq.com)博主 、独立开发者:Easy 发表了一篇 AI 对计算机专业和程序员行业影响的新浪博客,看后很有启发,故而将原文摘录于此: 单独开个贴说一下吧…

文心一言 VS 讯飞星火 VS chatgpt (275)-- 算法导论20.3 2题

二、修改 vEB 树以支持带有卫星数据的关键字。如果要写代码,请用go语言。 文心一言: vEB 树(van Emde Boas 树)是一种用于处理稀疏位集合的高效数据结构,它允许在常数时间内执行查找、插入、删除和前驱/后继操作。然…

服务器硬件基础知识:从零开始了解你的数字工作马

在现代社会,服务器是我们数字世界的基石。无论是网站、云服务还是大数据处理,背后都有强大的服务器在默默工作。对于许多人来说,服务器的工作原理和组成可能显得神秘且复杂。今天,我们将通过一篇通俗易懂的文章,逐步揭…

6.更复杂的光照

一、Unity的渲染路径 渲染路径决定了光照是如何应用到Unity Shader中的。我们需要为每个Pass指定它使用的渲染路径 如何设置渲染路径? Edit>Project Settings>Player>Other Settinigs>Rendering 如何使用多个渲染路径?如:摄像…

Vuex 4与状态管理实战指南

title: Vuex 4与状态管理实战指南 date: 2024/6/6 updated: 2024/6/6 excerpt: 这篇文章介绍了使用Vuex进行Vue应用状态管理的最佳实践,包括为何需要状态管理,Vuex的核心概念如store、actions、mutations和getters,以及如何处理异步操作和模…

网工内推 | 网络运维工程师,H3CIE认证优先,13薪,享股票期权

01 畅读 🔷招聘岗位:高级网络运维工程师 🔷职责描述: 1.负责线上业务网络技术运维工作,保障并优化线上网络质量; 2.规划并构建公司线上业务网络架构; 3.规划线上业务网络质量评估与监控体系&…

USB (1)

再看USB 其实回过头看USB 是可以和无线 有线(internet) 可以和PCIe 甚至AXI类比的 它们共通处在于都是communication 有限通信 有7层网络协议 在USB也是分层的 不同的协议,依赖的介质不一样 这就要求相应的Physical层处理 USB的physical层是基于Serdes的,所以有串并/并串的…

找寻卓越的生成式人工智能应用案例?别浪费在无趣之处!

“ 生成式AI(AI)技术的强大众所周知。但不知道你们是否和我有一样感觉,目前市面上,企业对生成式AI的应用,场景大多较为单一。” Ingo Mierswa Altair产品开发高级副总裁 我说这些生成式AI的应用单一,是指…

整理好了!2024年最常见 20 道 Kafka面试题(十)

上一篇地址:整理好了!2024年最常见 20 道 Kafka面试题(九)-CSDN博客 十九、Kafka的消费者如何实现幂等性? 在Kafka中,幂等性指的是消费者处理消息时,即使多次接收到同一条消息,也能…

MongoDBTemplate-基本文档查询

文章目录 流程概述步骤1:创建一个MongoDB的连接步骤2:创建一个查询对象Query步骤3:设置需要查询的字段步骤4:使用查询对象执行查询操作 流程概述 步骤描述步骤1创建一个MongoDB的连接步骤2创建一个查询对象Query步骤3设置需要查询…

中介子方程二

*#X$XyXpXyX$XαXηXtXαX$XWXyX$XyXWX$XpXαXqXηX$XeXαXhX$XyX$XpX$XyX$XyXeXαX$XpXyXpX$XαXeXyX$XyX$XpX$XyX$XhXαXeX$XηXqXαXpX$XWXyX$XyXWX$XαXtXηXαXpX$XEX$XZX$XpXαXηXtXαX$XWXyX$XyXWX$XpXαXqXηX$XeXαXhX$XyX$XpX$XyX$XyXeXαX$XpXyXpX$XαXeXyX$XyX$Xp…