actor 模型原理 (一)

2024-04-21 08:32
文章标签 模型 原理 actor

本文主要是介绍actor 模型原理 (一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

actor模型很牛逼,很流行,但是我不会,妈的,国内搜出来的讲解actor的都看不太懂,讲不太清,下面哥们就翻译一下老外的文章,以粗浅的方式体会一下到底什么是actor模型?


多线程开发要处理并发,锁,线程同步等一系列问题,一不小心,弄个大的bug,所以一般都不愿意自己动手写,能不能换一种思路,可以不可以介绍一种更高级的抽象模型,让我想实现多线程应用的时候,不用再考虑这些底层问题呢?


actor模型可以一定层度上帮你做到这一点。


从几个方面来讲解一下actor模型必须要解决的几个问题:


一、消息系统设计,或者叫线程间通信怎么做?


这里我们把要通信的线程想象成两个人,这俩人互相没法直接说话,都是通过邮件通信交流,假设这俩人一个是老师,一个是学生,他俩通信是通过邮件哈

那么:

1、学生要跟老师沟通,他就要发个邮件,邮件一旦发出,对不起,不能改任何东西了。你没有办法收回改了再发出去,这叫消息一旦发出,就不可改变。

就算你在邮件里不小心打了一行,我操你妈的,那也没法改了,邮件已经发出了。

2、老师那边呢,想什么时候看邮件,就什么时候看,这就叫异步,老师并不需要监听什么东西

3、老师看了你的邮件,可以给你回复,也可以啥都不干,但是他邮件一旦发出,同样不能收回来改——不可变性两端都一样的

4、学生也是想啥时候看邮件,就啥时候看,两边都是异步,都不会瞪着俩眼啥都不干,就等邮件过来


那么这种通信模型,很简单,但是就是actor模型想要的模型。其实看到这里,我们可以发现,这种通信方式,其实依赖一套邮件系统,或者叫消息管理系统

进程内部要有一套这样的系统,给每个线程弄一个独立的,收发信息的管道,并且都是异步的,写了不可更改的这样的数据系统。


二、并发性,或者叫人多了怎么办?


想想现在如果不是一个老师一个学生,而是三个老师三个学生呢 ?


每个学生给每个老师都发邮件,然后老师收到谁的,还都要回,当然这种邮件系统我们现实生活中是基本的功能,没什么特殊的呀

那么注意啊,actor的设计跟我们日常生活有所不同,假如你是个傻逼大学老师,你收到了三个学生三封邮件,那么你收到邮件肯定有先后顺序吧

actor要求你不能按照随意的顺序打开这些邮件,必须按照先后顺序处理,即按照邮件到你邮箱的先后顺序处理这些消息

那么基于一和二的要求,我们可以使用ConcurrentLinkedQueue来实现这种邮箱系统,当然还有很多实现可以做,也可以自己写一个。


三、容错,或者叫某个老师挂了怎么办


学生给老师发邮件,老师给学生回复邮件,ok,那么假如你通过邮件给物理老师问了一个问题,但是教你的物理老师出事了,不干了,或者跑路了,学校不止一个物理老师啊,

肯定要再安排一个物理老师把原来那个老师的职责担起来,那么这个邮件怎么办?新来的老师可能会选择忽略这些他上任之前的任何邮件,关于容错后面会再继续讨论


学校就像一个pool, actor pool ,来模拟各种类型的老师,一个挂了,马上创建一个新的,干同样事情的actor.


四、多种task模型 ,或者叫一个邮件里发出多种类型的消息


比如学生发邮件问老师,什么时候放假,在邮件里他当然也可以问我期末考试成绩出来了吗,多少分


actor两边都可以轻松支持多种类型的task


五、请求链 ,或者我想让三个老师一块给我做件事呢,而不是一个个挨个请求


这个后面再讲。














这篇关于actor 模型原理 (一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/922616

相关文章

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R