10 分钟了解 Actor 模型

10分钟从零搭建UE4 C++项目:环境配置、编译与首个Actor类实战 C++作为高性能系统编程语言,在游戏开发中扮演着核心角色,其直接操作硬件和内存的能力为复杂逻辑与极致性能优化提供了基础。通过编译型语言的特性,开发者能够实现精细的控制与高效的执行效率,这对于大型实时交互应用如游戏引擎至关重要。在虚幻引擎(UE4)开发中,C++与蓝图可视化脚本相辅相成,C++负责底层框架、性能敏感模块及复杂算法,而蓝图则快速搭建原型与设计交互。掌握UE4 C++开发,意味着能深入引擎底层进行定制,构建清晰可维护的架构,并优化游戏性能。本文将以**环境配置**和**项目编译**为切入点,通过一 阅读详情

过去十几年CPU一直遵循着摩尔定律发展,单核频率越来越快,但是最近这几年,摩尔定律已然失效,CPU的工艺制程和发热稳定性之间难以取舍,取而代之的策略则是增加核心数量,目前家用电脑四核已经非常常见,服务器更是达到了32核64线程。为了有效地利用多核CPU,我们在代码层面就应该考虑到并发性。十几年的痛苦开发经历告诉我们,threads并不是获取并发性的好方法,往往会带来难以查找的bug,但是不用害怕,今天我们有很多其他方法来获得易用的并发性,比如我们接下来介绍的Actor模型。

模型 Model

Actor模型是一个概念模型,用于处理并发计算。它定义了一系列系统组件应该如何动作和交互的通用规则,最著名的使用这套规则的编程语言是Erlang。这篇文章更关注模型本身而不是它在不同语言的实现。

Actors

一个Actor指的是一个最基本的计算单元。它能接收一个消息并且基于其执行计算。

这个理念很像面向对象语言,一个对象接收一条消息(方法调用),然后根据接收的消息做事(调用了哪个方法)。

Actors一大重要特征在于actors之间相互隔离,它们并不互相共享内存。这点区别于上述的对象。也就是说,一个actor能维持一个私有的状态,并且这个状态不可能被另一个actor所改变。

聚沙成塔

One ant is no ant, one actor is no actor.
光有一个actor是不够的,多个actors才能组成系统。在actor模型里每个actor都有地址,所以它们才能够相互发送消息。

Actors有邮箱

只得指明的一点是,尽管许多actors同时运行,但是一个actor只能顺序地处理消息。也就是说其它actors发送了三条消息给一个actor,这个actor只能一次处理一条。所以如果你要并行处理3条消息,你需要把这条消息发给3个actors。

消息异步地传送到actor,所以当actor正在处理消息时,新来的消息应该存储到别的地方。Mailbox就是这些消息存储的地方。

Actors通过异步消息沟通,在处理消息之前消息被存放在Mailbox中

Actors做什么

当一个actor接收到消息后,它能做如下三件事中的一件:

  • Create more actors; 创建其他actors
  • Send messages to other actors; 向其他actors发送消息
  • Designates what to do with the next message. 指定下一条消息到来的行为

前两件事比较直观,第三件却很有意思。

我之前说过一个actor能维持一个私有状态。「指定下一条消息来到做什么」意味着可以定义下条消息来到时的状态。更清楚地说,就是actors如何修改状态。

设想有一个actor像计算器,它的初始状态是数字0。当这个actor接收到add(1)消息时,它并不改变它原本的状态,而是指定当它接收到下一个消息时,状态会变为1。

容错 Fault tolerance

Erlang 引入了「随它崩溃」的哲学理念,这部分关键代码被监控着,监控者的唯一职责是知道代码崩溃后干什么(如将这个单元代码重置为正常状态),让这种理念成为可能的正是actor模型。

每段代码都运行在process中,process是erlang称呼actor的方式。这个process完全独立,意味着它的状态不会影响其他process。我们有个supervisor,实际上它只是另一个process(所有东西都是actor),当被监控的process挂了,supervisor这个process会被通知并对此进行处理。这就让我们能创建「自愈」系统了。如果一个actor到达异常状态并崩溃,无论如何,supervisor都可以做出反应并尝试把它变成一致状态,这里有很多策略,最常见的是根据初始状态重启actor。

分布式 Distribution

另一个关于actor模型的有趣方面是它并不在意消息发送到的actor是本地的或者是另外节点上的。

转念一想,如果actor只是一些代码,包含了一个mailbox和一个内部状态,actor只对消息做出响应,谁会关注它运行在哪个机器上呢?只要我们能让消息到达就行了。这允许我们基于许多计算机上构建系统,并且恢复其中任何一台。

进一步了解

这里是一个快速的概念模型回顾,其中的概念被运用到许多知名语言和库中,比如Erlang和Elixir, Akka (for the JVM) 和 Celluloid (for Ruby)。

如果你想更深入了解actor及其背后的原理,你可以进一步阅读下面书籍和文章:

这个视频比较完整地讨论了Actor的概念模型。
The Actor Model (everything you wanted to know)

Scala或Erlang的进程信箱都是一种Actor模型,也有Java的专门的Actor模型,这里是几种Actor模型比较明白了Actor模型原理,使用Disruptor这样无锁队列也可以自己实现Actor模型,让一个普通对象与外界的交互调用通过Disruptor消息队列实现,比如LMAX架构就是这样实现高频交易,从2009年成功运行至今,被Martin Fowler推崇。

原文地址: https://www.jianshu.com/p/449850aa8e82
actor:Actor模型的C ++实现 演员 用于构建事件驱动的异步系统的通用框架,旨在利用现代多核处理器体系结构。 它非常喜欢“标记事件驱动的体系结构”(SEDA)事件驱动器模型来进行流水线事件处理。 该系统非常适合构建IO密集型,对延迟敏感的应用程序(例如数据库,文件系统等),这些应用程序利用SSD等高吞吐量设备并支持10+ Gbps之类的高端通信硬件。 立即下载

相关推荐

STM32 (基于HAL库) 硬件IIC任意地址读写任意字节----AT24CXX芯片

转了一圈,发现有关STM32的iic的硬件是使用比较少,基于HAL库的就更少,传统的,大家都是采用软件模拟的。有iic的协议相对复杂,同时灵活,尤其是不同的设备的I2C通信组合变化也不同,使用灵活的软件模拟也是可以理解的,在加上I2C的设备读写速度都比较低,硬件读写的优势就更无法体现,哪怕硬件I2C可以开启DMA,甚至在随机的读取少量字节的情况下。开启DMA反而效果更差。自然而然的硬件I2C就无人问津了。

qq_32273059的博客 1580

Actors编程模型

  Actors模型(Actor model)首先是由Carl Hewitt在1973定义, 由Erlang OTP (Open Telecom Platform) 推广,其 消息传递更加符合面向对象的原始意图。 Actors属于并发组件模型 ,通过组件方式定义并发编程范式的高级阶段,避免使用者直接接触多线程并发或线程池等基础概念。    传统多数流行的语言并发是基于多线程之间的共享内...

700

Matlab/simulink频率响应分析方法

Matlab/Simulink仿真系列问题一.电气模块与信号模块 一.电气模块与信号模块

virtuoso~晓晓 3万+

disruptor----Concurrent Programming Framework...

disruptor发布了Java的2.0版本(.Net版本见这里),disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式实现,或者事件-监听模式的实现,直接称disruptor模式。disruptor最大特点是高性能,其LMAX架构可以获得每秒6百万订单,用1微秒的延迟获得吞吐量为100K+。disruptor与传统高性能模型...

cczakai的专栏 265

RK3588 MPP视频编码实战:从环境搭建到高效封装

本文详细介绍了在RK3588平台上利用MPP(Media Process Platform)进行硬件视频编码的完整实战流程。从MPP库的环境搭建、编译安装,到核心编码参数(如码率控制、GOP、图像对齐)的深入解析,并提供了一个可复用的C++编码器类封装方案,帮助开发者快速实现高效的H.264/H.265视频编码,显著降低CPU占用。

weixin_29192211的博客 347

FME入门系列教程3-带你玩转GIS数据搬运与处理

FME(Feature Manipulation Engine)就像GIS界的"瑞士军刀",它能轻松解决90%的数据处理难题。我最初接触FME是因为要处理200多个不同格式的CAD地形图,传统方法需要1周时间,用FME只花了2小时!:支持300+数据格式(Shapefile、GeoJSON、CAD、Excel等)添加Reader(数据源):选择示例数据roads.shp。添加Writer(输出):设置输出为GeoJSON格式。:将常用流程保存为Template(.fmwt)

weixin_41234946的博客 1244

Actor Framework:构建分布式系统的新星

是一个开源的、高性能的C++框架,它用于构建大规模并发和分布式系统。该框架采用了一种被称为"Actor模型"的设计理念,这种模型在处理高并发、异步计算以及网络通信时具有独特的优势。 ## 技术解析 Actor 模型源于计算机科学领域的一个理论概念,它的核心是将软件设计为一系列相互独立的“演员”(Actors)。每个Actor都有自己的状态,并通过发送消息进行通信,而不是直接调用对方的方法。这样

gitblog_00002的博客 747

Matlab_Marr小波尺度变换图

多尺度的连续小波变换分解后时间尺度图 墨西哥Marr小波函数: %delta 小波变换尺度 %N     小波函数的长度 %s     原始信号 %g     原始信号某个尺度下的小波变化系数 function g=Singularity_Detection(delta,N,s); %保持信号长度 n=length(s); % 构造墨西哥小帽小波函数 for index_x=1

桔色小西瓜 6601

Actors 异步编程模型剖析:C++实现与工程实践

摘要:本文深入剖析基于消息驱动的Actor异步编程模型,重点介绍其在C++中的实现与工程实践。通过线程-执行器拓扑结构和类图展示Actor核心架构,每个Actor绑定独立线程确保线程安全。消息处理机制采用无锁并发队列,包含详细的序列化实现和生命周期管理。与传统线程模型相比,Actor模型通过资源管理器统一处理消息,有效解决共享资源竞争问题。文章提供了完整的消息结构内存布局和C++序列化代码示例,为开发者构建高性能异步系统提供实践参考。

liulilittle的博客 1025

《QGIS快速入门与应用基础》【专栏完整目录】

《QGIS快速入门与应用基础》第一卷专栏完整目录,覆盖 001–328 全部篇目与附录,逐篇可跳转。

LuckyHanMo的博客 1299

先进封装类别分析与典型案例

当制程微缩逼近物理极限、单颗大芯片(reticle limit)面积受限于光罩尺寸,且逻辑、存储、射频、传感等功能无法用同一套工艺最经济地制造时,性能增益的来源从 "晶体管密度" 转向 "互连密度"。先进封装的本质,是在芯片外部用更短、更密、更宽的路径把多个裸 die(die)互连起来,换取更高带宽、更低延迟、更小体积和异构集成能力。行业通常按划分为 2D、2.5D、3D、扇出、SiP 五大谱系,Chiplet/UCIe 则是贯穿其上的设计方法论,玻璃基板、共封装光学(CPO)是正在成型的新分支。

0 32

Actor模型的本质:究竟是要解决什么问题

Actor模型的本质已经被强调了无数遍:万物皆Actor。Actor之间只有发送消息这一种通信方式,例如,无论是管理员让工作者干活,还是工作者把成果交还给管理员,它们之间也要通过发送消息的方式来传递信息。这么做看似不如直接方法调用来的直接,但是由于大量的消息可以同时执行。同样,消息让Actor之间解耦,消息发出之后执行成功还是失败,需要耗费多少时间,只要没有消息传递回来,这一切都和发送方无关。Ac

厚积薄发的博客 3554

目标检测YOLO实战应用案例100讲-基于数据融合的SAR图像中海上目标检测与跟踪(中)

本文使用的数据集为欧空局(European Space Agency, ESA)提供的Sentinal-1 数据集,Sentinel-1是欧洲“哥白尼计划”的SAR卫星机群,主要是用于陆地和海 洋服务的极地轨道全天候昼夜雷达成像任务[ 34]。Sentinel-1A于2014年4月3日发 射升空,Sentinel-1B于2016年4月25日发射升空,每颗卫星都携带C波段SAR, 共同提供地球表面的全天候、昼夜图像。

qq_36130719的博客 356

如何快速上手Akka-Core:第一个Actor系统10分钟实战教程(附代码)

Akka-Core 是 Akka 框架的核心模块集合,用于构建弹性、敏捷且高可用的 Actor 系统。本教程带你 10 分钟跑通第一个 Akka Actor 程序,覆盖环境准备、HelloWorld 实战、代码解读与官方文档导航,适合新手快速入门。 ## 一、什么是 Akka-Core? Akka-Core 是 Akka 生态的基础,它由多个核心模块组成,理解它们能帮你快速判断项目该用哪部分:

gitblog_00353的博客 290

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

5分钟上手Comedy:Node.js actor模型的快速入门教程

Comedy是一个轻量级Node.js actor框架,它通过 actor 模型简化了并发编程,让开发者能够轻松构建高可用、分布式的应用系统。本教程将带你快速掌握Comedy的核心概念和基础使用方法,帮助你在短时间内搭建起第一个actor应用。 ## 📌 什么是Actor模型? Actor模型是一种并发计算模型,它将系统中的每个组件视为独立的"演员"(Actor)。每个Actor拥有自己的状

gitblog_01008的博客 449

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

为什么Agent Substrate把Agent称为Actor?5分钟看懂沙箱运行时的设计哲学

Agent Substrate 是一个专为自主 Agent 设计的安全沙箱执行运行时,但它文档里的核心术语却不用 "Agent",而是 "Actor"。这个看似微小的命名选择,其实藏着一套清晰的设计哲学:把 Agent 当作**有状态、可休眠、可迁移的自治单元**来管理,而不是一个常驻的容器或 Pod。 [![Agent Substrate 项目标志](https://raw.gitcode.c

gitblog_00021的博客 855

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Akka.NET快速上手:5分钟创建你的第一个Actor系统

Akka.NET是.NET平台上**Actor模型**的权威实现,提供本地和分布式Actor支持,让并发编程变得简单可靠。无论你是初学者还是资深开发者,都能在短时间内掌握这一强大的并发工具。 ## 🎯 什么是Akka.NET? Akka.NET基于**Actor模型**构建,每个Actor都是一个独立的计算单元,通过消息传递进行通信。这种设计让并发编程变得直观且安全,避免了传统多线程编程中的

gitblog_00800的博客 776

【UE4】对gamePlay架构中actor的理解

看完【虚幻中国官方直播26期】的gamplay相关内容的小收获 对ACTOR这个东西的理解加深了,用了大半年的UE一直有着这样的思维——就是UE中的ACTOR它一定是一个东西 但其实并不是这样,在学习UE的过程中就有过很多的征兆告诉我: ACTOR并不是简单的ACTOR 比如: UE官方文档的C++编程指南中beginner内容第一节的摄像机转换: 虚幻官方文档c++编程指南——摄像机的切换 指南直接创建了一个ACTOR来控制摄像机的切换 虚幻官方直播: 虚幻官方直播——gamejam参赛技巧 在直

WadaFak的博客 1465

如何快速入门Protoactor-go:5分钟构建你的第一个Actor系统

想要在Go语言中构建高并发、分布式的应用程序吗?**Protoactor-go** 正是你需要的终极解决方案!作为基于Actor模型的并发框架,它能够帮助你轻松处理复杂的并发场景,实现真正的解耦并发和分布式计算。无论你是新手还是有经验的开发者,这篇指南都将带你快速上手Protoactor-go,在短短5分钟内构建你的第一个Actor系统。🚀 ## 什么是Actor模型? Actor模型是一种

gitblog_00508的博客 442

5分钟快速上手Moon:构建你的第一个Actor游戏服务器

想要快速构建高性能的游戏服务器吗?**Moon** 是一个基于 Actor 模型的轻量级游戏服务器框架,让你在5分钟内就能创建出你的第一个游戏服务器!🎮 这个框架采用 C++17 和 Lua 开发,使用 ASIO 进行网络调度,基于 Lua 协程实现异步编程,专为游戏服务器开发而设计。 ## 🚀 为什么选择Moon游戏服务器框架? **Moon游戏服务器框架** 采用 Actor 模型架构

gitblog_00639的博客 1073

CActor:基于仓颉语言的现代化 Actor 系统全面解析

CActor 是面向仓颉(Cangjie)语言的现代化 Actor 系统实现,参考 Akka / Akka Typed 的设计理念,提供完整的 Actor 模型、企业级特性与分布式能力。本文以项目官方中文 README 为主线,结合仓库源码(`src/`)与官方文档,系统讲解 CActor 的版本演进、核心特性、分层架构、快速上手路径、性能基准与配置体系,帮助你从零理解并驾驭这一高性能并发编程框架

gitblog_00169的博客 925

Akka Actor快速开始(Java)

Akka Actor快速开始(Java) 文章目录Akka Actor快速开始(Java)下载示例运行示例Hello World都做了些什么使用 Actor 模型的好处定义Actor和消息The Greeter actorThe GreeterBot actorThe GreeterMain actor创建Actor位置透明的优势Akka ActorSystem生成子Actor异步通信给Actor发送消息Main Class全部示例代码Greeter.javaGreeterBot.javaGreeterM

u011813453的专栏 1147
上一篇: KMP算法代码
下一篇: Palindrome Number【判断一个数是不是回文】
Sim0Hayha
博客等级 码龄10年 9粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值