鸿蒙原生应用开发-ArkTS语言基础类库多线程并发概述

并发模型是用来实现不同应用场景中并发任务的编程模型,常见的并发模型分为基于内存共享的并发模型和基于消息通信的并发模型。

Actor并发模型作为基于消息通信并发模型的典型代表,不需要开发者去面对锁带来的一系列复杂偶发的问题,同时并发度也相对较高,因此得到了广泛的支持和使用,也是当前ArkTS语言选择的并发模型。

由于Actor模型的内存隔离特性,所以需要进行跨线程的数据序列化传输。

  • 数据传输对象

目前支持传输的数据对象可以分为普通对象、可转移对象、可共享对象、Native绑定对象四种。

1.普通对象

普通对象传输采用标准的结构化克隆算法(Structured Clone)进行序列化,此算法可以通过递归的方式拷贝传输对象,相较于其他序列化的算法,支持的对象类型更加丰富。

序列化支持的类型包括:除Symbol之外的基础类型、Date、String、RegExp、Array、Map、Set、Object(仅限简单对象,比如通过“{}”或者“new Object”创建,普通对象仅支持传递属性,不支持传递其原型及方法)、ArrayBuffer、TypedArray。

2.可转移对象

可转移对象(Transferable object)传输采用地址转移进行序列化,不需要内容拷贝,会将ArrayBuffer的所有权转移给接收该ArrayBuffer的线程,转移后该ArrayBuffer在发送它的线程中变为不可用,不允许再访问。

// 定义可转移对象

let buffer = new ArrayBuffer(100);

3.可共享对象

共享对象SharedArrayBuffer,拥有固定长度,可以存储任何类型的数据,包括数字、字符串等。

共享对象传输指SharedArrayBuffer支持在多线程之间传递,传递之后的SharedArrayBuffer对象和原始的SharedArrayBuffer对象可以指向同一块内存,进而达到内存共享的目的。

SharedArrayBuffer对象存储的数据在同时被修改时,需要通过原子操作保证其同步性,即下个操作开始之前务必需要等到上个操作已经结束。

// 定义可共享对象,可以使用Atomics进行操作

let sharedBuffer = new SharedArrayBuffer(1024);

4.Native绑定对象

Native绑定对象(Native Binding Object)是系统所提供的对象,该对象与底层系统功能进行绑定,提供直接访问底层系统功能的能力。

当前支持序列化传输的Native绑定对象主要包含:Context和RemoteObject。

Context对象包含应用程序组件的上下文信息,它提供了一种访问系统服务和资源的方式,使得应用程序组件可以与系统进行交互。RemoteObject对象的主要作用是实现远程通信的功能,它允许在不同的进程间传递对象的引用,使得不同进程之间可以共享对象的状态和方法,服务提供者必须继承此类。

二、TaskPool和Worker

ArkTS提供了TaskPool和Worker两种并发能力供开发者选择,其具体的实现特点和各自的适用场景存在差异。

本文参考引用HarmonyOS官方开发文档,基于API9。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

沃通国密SSL根证书入根赢达信国密浏览器

近日,沃通CA国密SSL根证书正式入根赢达信国密安全浏览器,携手推动国产密码技术应用、完善国密应用生态体系,也标志着沃通国密SSL证书兼容性再次得到提升,进一步夯实国密应用根基。 密码算法的安全性是信息安全保障的核心&#xff…

服务器BMC测试之postman测试redfish

postman初始化设置----Redfish测试 1.下载安装postman 下载链接:https://www.postman.com/downloads/ 2.安装完成后启动postman -----登录账号请自行申请 3.新建测试环境 ----增加测试BMC ip 为环境变量 点击 新建环境 4.修改环境 增加变量名字为BMCIP 这个名字…

【Java程序设计】【C00398】基于(JavaWeb)Springboot的果园预售管理系统(含论文)

基于(JavaWeb)Springboot的果园预售管理系统(含论文) 项目简介项目获取开发环境项目技术运行截图 博主介绍:java高级开发,从事互联网行业六年,已经做了六年的毕业设计程序开发,开发过…

SQL/日志监控框架log4jdbc

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 log4jdbc is a Jav…

【61-80】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了

【61-80】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用61、 四次挥手相关内容62、挥手为什么需要四次?63、2MSL等待状态?64、四次…

【Redis主从架构。主从工作原理psync、bgsave、部分数据复制、主从复制风暴解决方案】【Redis哨兵高可用架构。sentinel】

Redis主从架构 Redis主从工作原理数据部分复制 Redis哨兵高可用架构client连接哨兵规则主节点挂了,集群从新选择主节点,并且同步给sentinel 转自图灵课堂 redis主从架构搭建,配置从节点步骤: 1、复制一份redis.conf文件2、将相关…

《Linux运维实战:达梦DM8数据库之开启本地归档》

一、归档概述 在达梦数据库归档模式下,数据库同时将重做日志写入联机日志文件和归档日志文件中分别进行存储。采用归档模式会对系统的性能产生影响,然而,当系统一旦出现介质故障,如磁盘损坏时,利用归档日志&#xff0c…

【nodejs ubuntu】nodejs版本过老的更新方法

使用apt方法安装的node.js版本过于老了,以至于我没法用npm下载hexo 下面是更新方法 参考了这篇文章 然后就可以成功安装了

TXT文本内容高效处理,支持删除文件前后行多余内容,轻松管理文本内容

在信息爆炸的时代,文本文件是我们日常生活和工作中不可或缺的一部分。然而,处理大量的TXT文本内容常常让人头疼不已。为了帮助您更高效地处理TXT文本内容,我们特别推出了一款强大的文本处理工具,支持删除文件前后行多余内容&#…

实现能效升级 | 基于ACM32 MCU的冰箱压缩机变频方案

概述 冰箱制冷系统中最重要的部件是压缩机。它从吸气管吸入低温低压的制冷剂气体,通过电机运转带动活塞对其进行压缩后,向排气管排出高温高压的制冷剂气体,为整个制冷循环提供源动力。这样就实现了压缩→冷凝→膨胀→蒸发 ( 吸热 ) 的制冷循环…

专业文件翻译,笔译翻译公司推荐!

在全球化的大潮中,文件翻译已然成为了商业、法律、科技、文化等诸多领域的核心纽带。特别是在商业交往、合同签订、技术交流等方面,一份高质量的译文往往关乎着合作的成败。而在这其中,专业的文件翻译公司更是扮演着至关重要的角色。它们不仅…

基于C++的GridMap2D 代码和公式

膨胀半径 这段代码主要是关于在二维地图上计算点之间距离的几个函数,同时也包含了查询地图上特定坐标点的距离和值的函数。我们逐一来解释每个函数的作用: worldDist(unsigned x1, unsigned y1, unsigned x2, unsigned y2): 这个函数计算两个地图坐标之…

navicat连接本地虚拟机centos7下mysql

1 环境准备 1.1 VM16和centos7 VMware历史版本下载 VMware最新版下载 这里下载需要注册账号,验证码输入不了的话在右上角把语言改为英语就好 centos7下载教学 激活码百度即可,或者这个 VM16安装centos7教学 1.2 mysql 直接安装mariadb MariaDB数据库…

JAVA- SPRINGBOOT+VUE 大文件断点续传

版本:6.5.40 代码:up6-jsp-springboot: Web大文件上传-jsp-springboot示例 - Gitee.com nosql示例 nosql示例不需要进行任何配置,可以直接访问测试。 SQL示例 1.创建数据库 2.配置数据库连接 3.自动下载maven依赖 4.启动项目 启动成功 6.访…

代码随想录算法训练营Day57 ||leetCode 583. 两个字符串的删除操作 || 72. 编辑距离

647. 回文子串 dp[i][j]表示第i位开始&#xff0c;第j位结束的字符串是否为回文串 class Solution { public:int countSubstrings(string s) {vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));int result 0;for (int i s.size() - 1…

【C语言】 gets()puts()fgets()fputs()字符串输入输出函数的用法

文章目录 C语言中的字符串输入输出函数&#xff1a;gets、puts、fgets与fputsgets函数puts函数fgets函数fputs函数 C语言中的字符串输入输出函数知识点总结结语 C语言中的字符串输入输出函数&#xff1a;gets、puts、fgets与fputs 在C语言中&#xff0c;处理字符串的输入和输出…

Workman(php)实时推送示例(thinkphp)与问题排查

workman workerman是一款开源高性能PHP应用容器&#xff0c;它大大突破了传统PHP应用范围&#xff0c;被广泛的用于互联网、即时通讯、APP开发、硬件通讯、智能家居、物联网等领域的开发。 业务场景 目前接触到的场景大致分为两类&#xff1a; 物联网方面&#xff1b;设备传…

聊聊多模态大模型处理的思考

多模态&#xff1a;文本、音频、视频、图像等多形态的展现形式。目前部门内业务要求领域大模型需要是多模态——支持音频/文本。从个人思考的角度来审视下&#xff0c;审视下多模态大模型的实现方式。首先就要区分输入与输出&#xff0c;即输入的模态与输出的模态。从目前来看&…

为什么微软、谷歌没做成,第一个干这件事反而是亚马逊?

相信大家都熟悉云服务、云存储等应用&#xff0c;但是你知道是哪家公司最先提出这个概念的吗&#xff1f; 是的&#xff0c;微软、苹果还是英特尔&#xff1f; 事实上&#xff0c;事实并非如此。 亚马逊是全球第一个推出云服务的公司。 Web于2006年首次推出&#xff0c;即如今…

Mudbox 2025新版中文---数字雕刻与纹理绘画新境界

Mudbox 2025是一款功能强大的3D建模软件&#xff0c;以其卓越的建模能力和高效的创作工具而备受瞩目。它支持纹理烘烤、三维层、多分辨率网格编辑等功能&#xff0c;为用户提供了直观且易于操作的用户界面。 Mudbox 2025新版中文下载 功能特色&#xff1a; 强大的建模与雕刻能…