go语言actor模式的简单介绍

actor模型和csp模型的区别

Actor模型和CSP区别

成都创新互联从2013年开始,先为秭归等服务建站,秭归等地企业,进行企业商务咨询服务。为秭归企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

Actor模型和CSP区别图如下:

Actor之间直接通讯,而CSP是通过Channel通讯,在耦合度上两者是有区别的,后者更加松耦合。

同时,它们都是描述独立的进程通过消息传递进行通信。主要的区别在于:在CSP消息交换是同步的(即两个进程的执行"接触点"的,

在此他们交换消息),而Actor模型是完全解耦的,可以在任意的时间将消息发送给任何未经证实的接受者。由于Actor享有更大的相互独立,因为他可以

根据自己的状态选择处理哪个传入消息。自主性更大些。

在Go语言中为了不堵塞进程,程序员必须检查不同的传入消息,以便预见确保正确的顺序。CSP好处是Channel不需要缓冲消息,而Actor理论上需要一个无限大小的邮箱作为消息缓冲。

系统用户业务主角和涉众三者的关系

系统用户业务主角和涉众三者的关系?答:主角又称参与者,官方定义是:在系统之外与系统交互的人或事。所以要找到参与者,首先要分清楚系统的边界,即系统之外是哪里。可以通过两个问题来找到这个边界:

1、 谁对系统有着明确的目标和要求并且主动发出动作(系统外部)?

2、系统是为谁服务的(系统内部)?

主角不一定是人,可以是发出启动一个用例动作的任何事物,如计算机系统,计时器,传感器等...

主角与涉众的关系:涉众是与要建设的这个系统有利益相关的一切人和事,主角是涉众代表。

主角与用户关系:用户是系统的使用者,是主角的实例。

主角与角色的关系:角色是主角的职责,角色是将众多参与者职责中抽象出相同的那一部分,将其命名而形成一个角色。角色一般适用于概念阶段的模型里面,以表达业务的逻辑理解。

打开CSDN APP,看更多技术内容

UML(thinking in uml 学习)--参与者和业务工人和涉众

占位 哈哈哈哈

继续访问

【数据库系统】第三讲 关系模型的基本概念

3.1 关系模型概述 1、关系模型的提出 2、关系模型的研究内容 一个关系就是一个Table 关系模型就是处理Table的,由三部分组成: 描述DB各种数据的基本结构形式(Table/Relation) 描述Table与Table之间所可能发生的各种操作(关系运算) 描述这些操作所应遵循的约束条件(完整性约束) 简单的说,即Table如何描述,有哪些操作、结果是什么、有哪些约束等 3、关系模型...

继续访问

Actor模型学习

最近看到了一篇写的贼好的blog,讲的完全详细,看得出来笔者的功力,所以赶紧转载过来,最下面有原文的地址。 大家一起共勉! 传统的游戏服务器要么是单线程要么是多线程,过去几十年里CPU一直遵循摩尔定律发展,带来的结果是单核频率越来越高。而近几年摩尔定义在CPU上已然失效,为什么呢? 大于在2003年左右,计算机的核心特性经历了一个重要的变化,处理器的速度达到了一个顶点。在接下来近15年里,时钟...

继续访问

Actor模型概念

转载自: 从实习到现在,一直在做Unity相关的业务,不知不觉中感觉已经不在关注服务器相关的技术了。一次偶然的机会再腾讯的gad平台上观看了云风在15年在腾讯做的skynet讲座(),skynet是用...

继续访问

深入解析actor 模型(一): actor 介绍及在游戏行业应用

1 介绍 1.1 什么是actor 对于刚接触actor的我,第一感觉就像redis一样,每个actor就是一个redis 实例,都有自己消息队列,actor相互通信通过将消息发给对方,消息发送进对方的消息队列,等待对方线程处理。来看看我们之前做项目的痛点。 游戏服务器通常分为多个服,每个服上有多个玩家。假设玩家与玩家数据交互操作,这时怎么避免数据竞争?两种解决方案: 1、将数据写入redis 首先redis效率高,也是单线程模型,不存在数据竞争,但是也有它的不足之处,操作redis 会受网络影响

继续访问

java actor akka_如何使用Akka actor处理Java期货

我在Java Web应用程序中有一个分层架构. UI层只是Java,服务是类型化的Akka actor,外部服务调用(WS,DB等)包含在Hystrix命令中.UI调用服务,服务返回Akka未来.这是Akka的未来,因为我希望使用Akka期货提供的onComplete和onFailure回调来简化UI编码.然后,该服务创建执行某些映射等的未来,并将调用包装回返回Java未来的HystrixComm...

继续访问

Actor模型

传统的游戏服务器要么是单线程要么是多线程,过去几十年里CPU一直遵循摩尔定律发展,带来的结果是单核频率越来越高。而近几年摩尔定义在CPU上已然失效,为什么呢? 大于在2003年左右,计算机的核心特性经历了一个重要的变化,处理器的速度达到了一个顶点。在接下来近15年里,时钟速度是呈线性增长的,而不会像以前那样以指数级的速度增长。 由于CPU的工艺制程和发热稳定性之间难以取舍,取而代之...

继续访问

actor-kotlin

actor-kotlin Java动态伪装工具,能够用伪装接口代理真实对象。(The Java dynamic camouflage tool can use the camouflage interface to proxy real objects.) 纯Kotlin开发,使用简单但功能强大,可用于组件化开发或插件化项目开发。 Android Demo: implementation 'io.github.xuehui

继续访问

天天酷跑多态

package Tian; public class Actor{ String name; Pet pet; package Tian; public final class Bear extends Pet { public void run(){ System.out.println("我是雄二,我喜欢蜂蜜"); } } ...

继续访问

并发模型值Actor和CSP

CSP的是(CSP)的缩写,翻译成中文是顺序通信进程,简称CSP的核心思想是多个线程之间通过Channel来通信,对应到golang中的chan结构,对应到Python中是QueueGo语言的CSP模型是由协程Goroutine与通道ChannelGo协程goroutine是一种轻量线程,它不是操作系统的线程,而是将一个操作系统线程分段使用,通过调度器实现协作式调度。是一种绿色线程,微线程,它与Coroutine协程也有区别,能够在发现堵塞后启动新的微线程。通道channel类似Unix的Pipe。....

继续访问

Actor模型和CSP模型的区别

Akka/Erlang的actor模型与Go语言的协程Goroutine与通道Channel代表的CSP(Communicating Sequential Processes)模型有什么区别呢? 首先这两者都是并发模型的解决方案,我们看看Actor和Channel这两个方案的不同: Actor模型 在Actor模型中,主角是Actor,类似一种worker,Actor彼此之间直接...

继续访问

Actor模式初步入门

Actor模型概念 Actor模型为并行而生,简单说是未解决高并发的一种编程思路。在Actor模型中,主角是Actor,类似一种worker,Actor彼此之间直接发送消息,不需要经过什么中介,消息是异步发送和处理的。在Actor模式中,“一切皆是Actor”,所有逻辑或者模块均别看做Actor,通过不同Actor之间的消息传递实现模块之间的通信和交互。Actor模型描述了一...

继续访问

并行编程模型之Actor/CSP/PGAS

并行编程模型之Actor/CSP/PGASActor1.背景2. 简介3.actor组成ActorMailbox邮箱behavior行为4.优势无锁异步隔离容错分布式5.劣势6.实践素数计算CSP1.简介2.CSP与go语言2.1 组成2.2Goroutine调度器3.Actor模型和CSP模型的区别PGAS1.简介2.实现 Actor 1.背景   处理并发问题就是如何保证共享数据的一致性和正确性,一般来说有两种策略用来在并发线程中进行通信:共享数据和消息传递。   熟悉c和java并发编程的都会比较熟悉

继续访问

go Actor模型和CSP模型的区别

Actor模型和CSP模型的区别 Akka/Erlang的actor模型与Go语言的协程Goroutine与通道Channel代表的CSP(Communicating Sequential Processes)模型有什么区别呢? 首先这两者都是并发模型的解决方案,我们看看Actor和Channel这两个方案的不同: Actor模型 在Actor模型中,主角是Actor,类似一种worker,Actor彼此之间直接发送消息,不需要经过什么中介,消息是异步发送和处理的 Actor.

继续访问

控制`Actor`朝向,运动 Learn Unreal Engine (with C++)

控制`Actor`的朝向,以及

未来计算机广泛使用Javascript是不是历史的倒退

1、未来计算机会不会广泛使用js还不好说,服务端可用的语言太多,js并没有杀手级的优势。但题主给我的感觉好像只是在讨论客户端,客户端的话,js应该会有极大的占有率,毕竟一个公认的事实标准达成不容易,而且js本身也在进步

2、面向对象是伟大的发明,但不是封装的唯一最好实现。go语言已经放弃了传统面向对象的模式了,但并不影响它的封装性;erlang使用的是函数式编程和actor模式,因为这种模型更符合并行计算和进程通讯的思维方式

3、解析型语言的确比不上编译型语言的效率,但现代计算机性能提高,加上解析器的不断优化,90%的应用场景都不需要考虑这个问题了,要不然python、php、ruby等语言都没有存在价值了

4、除了visual stdio相关的东西,实际上其他所有编程语言都没有杀手级的编辑器和调试器,但不妨碍程序员们用他们写出大型程序,甚至是操作系统

Actor模型

Actor 模式是一个解决分布式计算的数学模型,其中 Actor 是基础,它能回应接收到消息,能够自我决策,创建更多的 Actor,发送更多的消息,决定如何回应下一个接收到的消息。Actor 认为一切皆是 Actor,类似于面向对象认为一切皆 Object 一样。OO 的执行是顺序的,Actor 模型内在设计就是并行的。

Actor 是计算实体,它回复接收到的消息,能够并行的:

这些操作并没有顺序要求,它们能够并行地实施。由于没有对消息的时序做规定,Actor 模式是一种异步模型,发送到 Actor 不等待消息被接收而继续执行。Actor 之间不共享状态,如果想获取其他 Actor 的状态,只能通过消息请求的方式。

Actor 在消息内部指定接收消息的 Actor 地址。Actor 可以用自己的地址发送消息,相当于自己接收到自己发送的消息,可以驱动自己的状态。

Actor 可以被认为是在用户空间实现的并发实体,所以它应该是应用级别的线程。如果认同这个观点那么 Actor 要满足的要求 = 操作系统对进程/线程 提出的要求一样。

每个并发实体都是要有一个固定的数据结构,必须有一个容器可以保存当前所有的并发实体。这一点基本上很容易满足,Akka 中 Actor 就是一个类,所以它的结构就是这个类的数据结构,大小也就是这个类的大小。Akka 中的 Dispatcher 保存有所有 Actor 的列表。

操作系统的是通过临界区,锁来定义多线程共享数据模型的。在 Actor 中是通过消息来共享数据的。基于消息传递要求“数据只读”,你发送出去的数据再修改肯定就不对了。但是这一点在 Java 里面无论如何都是做不到的,你不修改变量的引用但是还可以修改变量里面的值,调用对象的方法。

这是最重要的:没有调度,并发实体根本不能称之为并发实体。操作系统中 CPU 是由内核管理的,调度算法是基于时间片来调任务的,内核随时可以剥夺一个任务的 CPU 使用权这就是“抢占”。这一点非常重要,没有这个功能就意味着调度是不公平的。一个任务耗费大量 CPU 会把另个一任务给饿死。但是在用户空间(应用层)很难实现这一点,毕竟 CPU 是不受应用程序的控制的,没有把办法剥夺。抢占看似可有可无,但是没有它就没有“公平调度”,也就谈不上并发。(有任务撑死,有任务饿死)

比如写两个 Actor,使用无限循环输出字符串(while(true))会疯狂的吃 CPU,如果是可抢占的公平调度,则 actor1 和 actor2 应该是比较有规律的交替(大家得到的 CPU 时间差不多)

ErLang 非常均匀的任务切换,实现了“可抢占的公平”。


新闻名称:go语言actor模式的简单介绍
本文网址:http://hbruida.cn/article/doiigsj.html