Lite Actor:方舟Actor并发模型的轻量级优化

Dapr for dotnet | 并发计算模型 - Virtual Actors actor 模型起源于1973年。 它是由 Carl Hewitt 作为 并发计算的概念模型 提出的, 并发计算是一种同时执行多个计算的计算形式 。 当时还没有高度并行的计算机,但多核 cpu 和分布式系统的最新进展使 actor 模型流行起来。 在 actor 模型中,actor 是一个独立的计算单元和状态单元。 这些 actor 彼此完全隔离,他们永远不会共享内存。 actor 之间使用消息相互通信。 当 actor 接收到消息时,它可以更改其内部状态,并向其他(可能是新的) a 阅读详情

原文:Lite Actor:方舟Actor并发模型的轻量级优化,点击链接查看更多技术内容。

并发模型是用来实现不同应用场景中并发任务的编程模型,通过合理地使用多线程,可以缩减应用程序的开发和维护成本,同时还能更好地提升应用程序在多核设备中的运行性能。随着IoT时代下应用场景的不断复杂、多核设备的不断增多,并发模型显得举足轻重,本期我们将为大家带来方舟编译器对传统Actor并发模型的轻量级优化。

一、什么是并发模型?

在操作系统中,并发是任务在不影响最终执行结果的情况下无序或者按部分顺序执行的能力,如图1所示,在一个时间段中可能有多个任务都处于已启动运行到运行完毕之间,同时,并发单元也可以在多核设备下并行执行,可以极大地提高多核设备的运行性能。

图1 并发单元的并行执行

在日常开发中,由于并发任务多种多样,任务拆分方式可能不同,线程间的通信方式也可能不同,所以不同场景下的多线程并发任务可以通过不同的并发编程模型来实现。常见的并发模型又分为内存共享的并发模型和消息通信的并发模型。其中,基于内存共享的并发模型存在数据竞争,往往需要锁或者其它同步机制来保护共享的可变数据。而基于消息通信的并发模型,不需要开发者去面对锁带来的一系列复杂偶发的问题,同时并发度也相对较高。

作为基于消息通信并发模型的典型代表,Actor并发模型深受广大开发者的追捧。下面,我们将为大家带来Actor并发模型的解析。

二、Actor并发模型

Actor是一种历史悠久的分布式并发模型,基于事件(消息)机制传递数据,能有效地避免线程中资源争夺、死锁等情况。本节我们将为大家介绍Actor并发模型的交互原理以及在JS中的应用。

1. 交互原理

如图2所示,在典型的Actor交互流程中,各个Actor并发地处理主线程任务,每个Actor内部都有一个消息队列及单线程执行模块,消息队列负责接收主线程及其他Actor的请求,单线程执行模块则负责串行地处理请求、向其他Actor发送请求以及创建新的Actor。由于Actor采用的是异步方式,各个Actor之间相互隔离没有数据竞争,因此Actor可以高并发运行。

图2 Actor交互流程

2. 应用场景

Actor并发模型被广泛应用于Erlang、Haskell、Akka(Java)、JS等编程语言,下面我们将介绍Actor并发模型在JS中的应用。

(1) Worker介绍

众所周知,JS从诞生起就是单线程,为解决因单线程造成的I/O阻塞问题,JS通过异步回调的方式并结合事件机制,充分提高了单线程下对于轻量级事件的响应速度。但是如果遇到某些比较复杂的任务,比如CPU密集型运算任务、I/O密集型任务、同步任务等,仍采用单线程执行就显得有点力不从心,无法解决复杂任务的线程阻塞问题。所以,JS需要引入多线程任务支持。

Worker是较为典型的JS多线程解决方案,基于Actor并发模型实现,为JS创造多线程并发环境。如图3所示,在Worker的交互流程中,JS主线程可以创建多个Worker子线程,各个Worker线程间相互隔离,并通过序列化传递对象,等到 Worker 线程完成计算任务,再把结果返回给主线程。

图3 Worker交互流程

(2) Worker缺陷

Worker实现了复杂JS应用的多线程并发执行,在一定程度上提升了复杂JS应用的运行效率。但是,由于每个Worker线程都拥有独立的虚拟机实例,且各个实例之间不共享任何数据,使得JS Worker启动速度较慢、内存占用较高。

三、Lite Actor

为了让JS应用能充分利用多核设备的计算能力更好地提升性能,方舟编译器提出了Lite Actor概念,并针对Worker的缺陷进行了优化。

1.  原理介绍

方舟编译器JS运行时在传统Actor并发模型的基础上,通过共享Actor实例中的不可变对象,以减少每个Actor实例承载的数据,提升了每个Actor的运行性能,从而实现Actor并发模型的轻量级优化。

图4 Lite Actor

2. Worker优化

方舟编译器JS运行时基于Lite Actor概念对Worker进行了优化,具体优化如下:

● 方舟编译器JS运行时通过内置的字节码文件管理器,已完成了对多个Worker间缓存的字节码文件的共享,大大减少了字节码的预加载处理时间以及内存占用。

● 方舟编译器JS运行时结合TS类型分析系统与对象分离技术,已经实现了Worker中部分TS类型信息与准静态类型信息的识别与共享,在一定程度上减少Worker线程的内存使用以及Worker线程间的信息传递耗时。同时,由于已共享的部分无需进行序列化拷贝传递,所以Worker的序列化时长也得到了相应的优化。目前,剩余未共享部分数据仍存在很大的提升空间,这部分工作仍会持续展开,让我们共同期待。 

● 针对外部内存的数据,例如字节码中的字符串,由于不受JS内存管理,未来也可以实现共享。

图5 Worker优化

3. 性能对比

使用方舟编译器的Lite Actor优化后,Worker的性能得到了显著的增长,如图6所示,不难看出,相较于传统Actor并发模型,Worker的启动时长及内存占用均优化了50%以上。 

图6 性能及内存对比

以上就是本期全部内容,方舟编译器JS运行时通过对传统Actor并发模型的轻量级优化,极大地提高了Worker的启动性能。当前Lite Actor仍有很大的探索空间,期待广大开发者加入我们,共同见证万物互联的无限可能。

【消息队列】——如何使用Actor模型解决并发问题 摘要 本文探讨了Actor模型在多线程并发编程中的优势与应用。文章首先分析了传统共享内存模型面临的挑战,包括线程安全、竞争条件以及同步机制带来的死锁等问题。随后详细介绍了Actor模型的核心思想:每个Actor独立维护状态和消息队列,通过消息传递实现通信,从而避免共享内存带来的并发问题。通过餐厅点餐的生动案例,展示了Actor模型如何简化并发程序设计。文章还讨论了Actor模型的优势(简单可靠、高性能、易扩展)和局限性(设计复杂度高、高并发场景限制、分布式事务处理困难),并比较了不同语言对Actor模型的支 阅读详情

相关推荐

深入理解Actor模型:并发计算的理论框架

Actor模型是一种并发计算模型,用于描述并发系统中的计算单元以及它们之间的交互方式。该模型的核心概念是“演员”,这是一个抽象的实体,它通过发送和接收消息进行通信,同时隐藏了内部状态。Actor模型的起源可以追溯到1973年,由卡尔·休伊特(Carl Hewitt)和他的研究小组在麻省理工学院首次提出,旨在解决并发系统中由于共享状态导致的复杂性和不确定性问题。Actor模型鼓励编程时采用不可变数据结构和消息传递来代替共享内存。这种方法有助于构建可扩展的、易于推理的并发系统。

weixin_35916518的博客 824

漫谈并发编程:Actor模型

0x00 前言一般来说有两种策略用来在并发线程中进行通信:共享数据和消息传递。熟悉c和java并发编程的都会比较熟悉共享数据的策略,比如java程序员就会常用到java.util.concurrent包中同步、锁相关的数据结构。使用共享数据方式的并发编程面临的最大的一个问题就是数据条件竞争(data race)。处理各种锁的问题是让人十分头痛的一件事。 和共享数据方式相比,消息传递机制最大的优点

木东居士 1万+

ActorJs:javascript 中成熟的演员模型

演员Js 如果您想了解演员模型,那么是一个不错的起点。 ActorJs 是一个相当成熟的演员模型,可以在浏览器和服务器上运行。 它最初是作为一个分支开始的,但后来发展成为自己的代码库。 它是从头开始重新设计的,这里没有 NActor 代码。 不过,NActor 是一个很棒的小项目,我鼓励您检查一下。 从中提取此代码的 NActor 的原始分支可以在找到。 描述 有几个基于 js/nodejs 的 actor 库,几乎没有,它们实现了以下功能: 基本监督 演员实现的热交换 远程参与者的位置透明度 这太糟糕了,因为这些是使演员模型如此强大的一些功能。 所以基本上,我已经痒了一段时间了,几周前决定继续抓挠它:) 这对我来说是一个学习/探索项目,目前不应该被认为适合生产,尽管反馈肯定是受欢迎的。 在设计/实施方面,这里有一些我将尝试遵循的通用工具和指南: 用 ES6 编写,用 bab

Actor并发编程模型

Actor并发编程模型 Actor并发编程模型,是scala提供给程序员的一种与Java并发编程完全不一样的并发编程模型,是一种基于事件模型的并发机制。Actor并发编程模型是一种不共享数据,依赖消息传递的一种并发编程模式,有效避免资源争夺、死锁等情况。 Java并发编程对比Actor并发编程 Java内置线程模型 scala Actor模型 "共享数据-锁"模型 (share data and lock) share nothing 每个object有一个monitor,监视线程对共

beishanyingluo的博客 902

Spiders.js:通过actor可以轻松实现JavaScript中的并行和分布式编程

Spiders.js 通过actor可以轻松实现JavaScript的并行和分布式编程 用法 使用npm安装: npm install spiders.js 基本上,Web Worker和子进程是可用于并行化JavaScript中的应用程序的唯一并行构件。 面对现实吧,并行编程非常困难,并且与Web Worker或Node.js的子进程API交往并没有使它变得更容易。 Spiders.js基于通信事件循环提供了一种易于理解的API,使您可以轻松地并行生成actor。 而且,这些参与者可以与任何其他Spiders.js参与者进行本地通信(无论这些参与者是否驻留在同一台计算机上)。 教程 使用Actor,您可以处理并行性,而不必担心数据争用和共享可变状态的麻烦。 参与者基本上是完全隔离运行的线程,该线程通过消息传递与其他参与者进行通信。 通讯事件循环是参与者的一种特殊形式,它为该并行模型添

dataflow-js:DataFlow JS 提供了一个基于actor 的编程模型,支持粗粒度数据流和流水线任务的进程内消息传递

数据流-js DataFlow JS 提供了一个基于actor 的编程模型,支持粗粒度数据流和流水线任务的进程内消息传递。 安装 为 nodejs 模块使用 npm 包管理器: npm install --save dataflow-js 应用程序接口 动作块 ActionBlock 类提供了一个数据流块,它为每个发布的数据元素调用提供的操作。 var ActionBlock = require ( 'dataflow-js' ) . ActionBlock ; var addToBasket = new ActionBlock ( function ( product , price , quantity ) { console . log ( 'Adding product' , product ) ; // ... } ) ; addToBasket . p

ArkCompiler 5.0:方舟编译器新一代编译优化技术解析(160)

ArkCompiler(方舟编译器)作为 HarmonyOS 的核心底层技术,在 5.0 版本中迎来了深度的架构演进与性能突破。其核心目标是通过技术创新,解决跨语言调用开销大、内存占用高以及复杂场景渲染卡顿等行业痛点。

Davina_yu的博客 444

STM32巡线小车PID调参实战:从五路灰度传感器数据到稳定运行的避坑指南

本文详细介绍了STM32巡线小车的PID调参实战,从五路灰度传感器数据处理到PID参数优化,提供了系统化的调试方法和常见问题解决方案。通过加权平均法计算偏移量,逐步调整比例、积分、微分参数,实现小车稳定巡线。文章还涵盖了定时器配置、控制周期优化及高级调试技巧,帮助开发者避开常见陷阱,提升巡线性能。

weixin_42570484的博客 192

Actor 并发控制模型

Actor并发控制模型是一种不共享数据、依赖消息传递的并发编程模式。在这个模型中,“Actor”是基本的工作单元,它具备接收消息、处理消息和发送消息的能力。每个Actor都有一个唯一的标识符和一个消息队列(或称为MailBox),用于存储接收到的消息。

猪猪 1099

openMVS ---dense point cloud(代码理解)

openMVS ---dense point cloud(代码理解)0 代码实现原理1 代码实现步骤1.1 参数传递1.2 loading .mvs数据1.3 稠密重建1.3.0 相关变量及概念1.3.1 ComputeDepthMaps(data) --计算多张深度图1.3.1.1. pre1.3.1.2 为每一张depth map Select view(s) !!!1.3.1.2.1 N neighbors --- global score + filter1.3.1.2.2 MRF ---- t

小rivaaaa的博客 5328

使用海康机器人的SDK进行DWS开发时如何筛选不同类型的相机

使用MVIDCodeReader、MvCodeReaderSDK、MvVolMeasureSDK联合开发时,通常会做一些设备枚举列表,但是不同类型的设备需要枚举在不同的列表中,便于软件使用者配置参数,例如: 如何保证枚举出来的设备是可以选择的对应的设备。我们通常枚举出来的是这样的: 解决办法 在联合开发中,我们发现,只有MvVolMeasureSDK的枚举设备接口EnumStereoCamEx可以正确的只枚举出网络内的体积设备,其余的MVIDCodeReader、MvCodeReaderS

qq_29123967的博客 2730

并发编程/Actor模型设计为高并发项目提供基础模型(设计篇)

Actor模型是一种革命性的并发编程范式,它通过封装状态、行为和消息传递来构建高并发和分布式系统。自1973年提出以来,Actor模型已被广泛应用于从游戏开发到金融服务等多个领域。在Actor模型中,每个Actor都是一个独立的计算实体,它们通过消息传递来交互,无需共享状态,从而避免了传统并发编程中的锁和竞态条件问题。本文将深入探讨Actor模型的核心概念、工作原理以及如何在实际应用中实现Actor模型,为读者提供一个全面的指南,以便更好地理解和利用这一强大的并发编程工具。

肖哥弹架构博客 1924

H3C设备VRF配置实战:5步搞定多业务网络隔离(附排错技巧)

本文详细介绍了在H3C设备上配置VRF(虚拟路由转发)实现多业务网络隔离的实战方法。通过五步配置流程,从创建VPN-instance、绑定接口到配置独立路由表,帮助网络工程师在单台设备上构建逻辑隔离的企业级网络,并分享了高级路由配置与常见排错技巧。

gold8的专栏 936

十分钟理解Actor模式

Actor模式是一种并发模型,与另一种模型共享内存完全相反,Actor模型share nothing。所有的线程(或进程)通过消息传递的方式进行合作,这些线程(或进程)称为Actor。共享内存更适合单机多核的并发编程,而且共享带来的问题很多,编程也困难。随着多核时代和分布式系统的到来,共享模型已经不太适合并发编程,因此几十年前就已经出现的Actor模型又重新受到了人们的重视。...

weixin_33826268的博客 781

YOLOv11 改进 - 注意力机制 | LS-YOLO MSFE 多尺度特征提取模块:并行分支结构增强多尺度感知,优化遥感与小目标检测

本文介绍了一种用于滑坡检测的模型LS-YOLO及其在YOLOv11中的结合应用。LS-YOLO首先构建多尺度滑坡数据集MSLD,为模型训练提供丰富数据。设计了基于高效通道注意力、平均池化和空间可分离卷积的多尺度特征提取模块MSFE,充分提取滑坡特征信息。在解耦头中采用膨胀卷积增加模型感受野。我们将MSFE模块集成进YOLOv11,替换部分原有模块。实验表明,改进后的YOLOv11在数据集中表现出色 。

魔改工程师的博客 870

解析AI人工智能领域AI芯片的散热技术

当你用ChatGPT写代码、用AI生成高清图片时,背后的AI芯片可能正在“发高烧”——全球TOP500超算的平均功耗已突破10兆瓦,单颗GPU的峰值功耗超过700W(相当于3台家用空调同时运行)。本文将聚焦AI芯片的散热技术,覆盖从基础原理到前沿方案的全链条解析,帮助读者理解“散热为什么比算力更重要”。

AIGC应用创新大全的博客 934

Node.js 应该拥抱 Actor 模型

Node.js 应该拥抱 Actor 模型 Node.js 是近年来服务器端开发工具中可以说最为成功的一个工具了,不仅仅利用 JavaScript 和 Reactor 模型来达到快速开发高并发应用的目的,也顺利入侵前端生态圈,前端开发各种必备的工具链基本都使用 Nodejs 开发。我也用 Nodejs 做过一些针对并发的项目如聊天室等等,但是始终觉得 Nodejs 的基础理念和各种框架还不足够抽象,以帮助我快速对此类项目进行清晰有条理的建模。当项目尺度越来越大之后, 为了达到更好的 Scalability

嘿嘿 1032

Python爬虫实战:实时爬取东方财富网股票行情

东方财富网实时行情(价格、涨跌幅、成交量等)K线图、分时图、技术指标市盈率、换手率、总市值等指标相比某些收费API,东方财富网页端接口不需要登录、免费、响应快、封装清晰,适合爬虫实践。东方财富网股票数据接口分析实时数据抓取与字段提取数据结构化处理自动化批量抓取多线程加速采集数据可视化展示支持存储为CSV/Excel/数据库。

2201_76125261的博客 1万+

浅谈Actor并发模型

目录 0x00 Actor出现的背景 0x01 Actor如何通过消息传递避免数据竞争? 0x02 Actor到底是什么? 0x03 Actor特性 0x031 容错 0x032 分布式与位置透明性 0x04 Actor使用场景 0x05 缺点 0x051弱隔离性 0x052其他问题 0x00 Actor出现的背景 大约...

学习猴 4290

Python OpenCV教程从入门到精通的全面指南【文末送书】

全书共分为16章,包括Python与OpenCV、搭建开发环境、图像处理的基本操作、像素的操作、色彩空间与通道、绘制图形和文字、图像的几何变换、图像的阈值处理、图像的运算、模板匹配、滤波器、腐蚀与膨胀、图形检测、视频处理、人脸检测和人脸识别以及MR智能视频打卡系统。主流技术,全面覆盖:本书内容丰富,涵盖了Open CV图像处理技术的方方面面,如图像的几何变换、阈值处理、图像运算、模板匹配、滤波器、腐蚀与膨胀、图形检测、视频处理、人脸检测和人脸识别等。此外,通过对比原图,可更直观地看到图像经过处理后的效果。

一键难忘的博客 9072

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

actor模型 java框架,actor模型(actor模式优缺点)

Actor之间只有发送消息这一种通信方式,例如,无论是维护员让工作者干活,还是工作者把成果交还给维护员,它们之间也要通过发送消息的方式来传递信息。这么做看.立方结构有三种类型:1、简单立方结构中原子是沿着立方体的边相接触;2、面心立方结构中原子沿着立方体的面对角线相接触 ;3、体心立方结构中原子沿着体对角线相.其实无论是使用数据库锁 还是多线程,这里有一个共同思路,就是将数据喂给线程,就如同计算机...

weixin_29666489的博客 693

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Reactor,Proactor,Actor网络模型

其实无论是使用数据库锁 还是多线程,这里有一个共同思路,就是将数据喂给线程,就如同计算机是一套加工流水线,数据作为原材料投入这个流水线的开始,流水线出来后就是成品,这套模式的前提是数据是被动的,自身不复杂,没有自身业务逻辑要求。但是如果数据自身要求有严格的一致性,也就是事务机制,数据就不能被动被加工,要让数据自己有行为能力保护实现自己的一致性,就像孩子小的时候可以任由爸妈怎么照顾关心都可以,但是如果孩子长大有自己的思想和要求,他就可能不喜欢被爸妈照顾,他要求自己通过行动实现自己的要求。

sun007700的专栏 2199

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java中的并行编程模型:如何利用Actor模型提高并发性能

通过合理使用Actor模型,开发者可以有效提高系统的并发性能,简化并发编程的复杂性。它以消息传递的方式实现线程间的协作,避免了传统并发模型中的许多问题。今天我们来讨论Java中的并行编程模型,特别是如何利用Actor模型提高并发性能。除了Actor模型,Java中还有其他常见的并发模型,如线程池、并发集合和Fork/Join框架。Akka是一个强大的工具包,提供了Actor模型的实现。在Java中,虽然原生API并不直接支持Actor模型,但我们可以借助第三方库(如Akka)来实现Actor模型。

微赚淘客系统开发者博客 1213

Actor与并发

Future:(用来存放将来可能成功或失败的结果)的使用一、响应式四准则设计目标:灵敏性、伸缩性、容错性、事件驱动性二、剖析Actor1.AbstractActor:首先,我们继承了AbstractActor2.Receive:AbstractActor 类有一个receive 方法,其子类必须实现这个方法或是通过构造函数调用该方法。receive 方法返回的类型是PartialFunction。...

1、测试博主技术知识分享 2、pos行业知识技术分享 3、java后端技术知识分享 4、嵌入式技术知识分享 5、运维部署相关知识分享 1381

并发之Actor模型

并行与并发 Erlang 之父 Joe Armstrong 并发(concurrency) 并发的关注点在于任务切分。单核CPU也可以并发,只需要将不同的task按时间片切分。在没个时间段内就会有多个task被执行过。一些被阻塞的task也可以让出CPU时间片给其他task执行。 并行(parallelism) 并行的关注点在于同时执行。多核CPU。可以将多个task同时执行。 我们代码里...

implements的专栏 833

软件架构:深入理解 Actor 模型,并发编程的强大工具

Actor 模型是一种计算模型,用于实现并行计算。处理接收的消息创建新的 Actor发送更多消息决定如何响应接下来的消息Actor 模型由 Carl Hewitt 在 1973 年首次提出,旨在通过消息传递来解决传统并发程序中共享状态的复杂性问题。每个 Actor 都有自己的私有状态和行为,且与其他 Actor 之间不共享任何状态信息。

十年运维开发经验的王义杰在此分享自己的知识和经验 1202
上一篇: 基于eTS高效开发HarmonyOS课程类应用
下一篇: 解密方舟的高性能内存回收技术——HPP GC
「已注销」
博客等级 码龄5年 1045粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值