下一代的 Actor 模型框架 Proto Actor

ProtoAct 是下一代的 Actor 模型框架,提供了 .NET 和 Go 语言的实现,默认支持分布式,提供管理和监控功能。在过去几年,我们经常看到两种 Actor 模型方法相互竞争,首先是经典的 Erlang/Akka 风格的 Actor 模型;以及微软的“虚拟Actor”或者成为“Grains” 的风格。这两种风格有各自的优缺点。

而 Proto.Actor 将这两种风格结合在一起形成一个通用的框架。同时解决了另外一个主要的问题 —— 目前已有的 Actor 框架或者是语言无法在不同平台间进行通讯,选择了一种框架会导致你锁定到某一个特定平台上。

这也就是为什么 Proto.Actor 引入了“Actor 标准协议”的概念,这是一个可以被不同语言实现的基础原语的协议。这改变了 Actor 系统中的游戏规则,你可以自由的为你基于 Actor 的微服务选择不同的语言,这在之前是不可想象的。

Proto.Actor 提供了可伸缩、实时的事务处理,适用的场景包括:

  • 投资和商业银行业务

  • 零售

  • 社交媒体

  • 仿真

  • 游戏和赌博

  • 汽车和交通系统

  • 卫生保健

  • 数据分析

任何需要高吞吐量、低延迟的业务需求都可以用到 Proto.Actor 。

Actors :

关于 Actor 模型的介绍:

Actor模型在并发编程中是比较常见的一种模型。很多开发语言都提供了原生的Actor模型。例如erlang,scala等。

Actor,可以看作是一个个独立的实体,他们之间是毫无关联的。但是,他们可以通过消息来通信。一个Actor收到其他Actor的信息后,它可以根据需要作出各种相应。消息的类型可以是任意的,消息的内容也可以是任意的。这点有点像webservice了。只提供接口服务,你不必了解我是如何实现的。

一个Actor如何处理多个Actor的请求呢?它先建立一个消息队列,每次收到消息后,就放入队列,而它每次也从队列中取出消息体来处理。通常我们都使得这个过程是循环的。让Actor可以时刻处理发送来的消息。

Go 示例代码 https://github.com/AsynkronIT/protoactor-go  :

type Hello struct{ Who string }
type HelloActor struct{}func (state *HelloActor) Receive(context actor.Context) {switch msg := context.Message().(type) {case Hello:fmt.Printf("Hello %v\n", msg.Who)}
}func main() {props := actor.FromInstance(&HelloActor{})pid := actor.Spawn(props)pid.Tell(Hello{Who: "Roger"})console.ReadLine()
}

C# 示例代码 https://github.com/AsynkronIT/protoactor-dotnet  :

using System;using Proto;class Program{static void Main(string[] args){var props = Actor.FromFunc(ctx =>{if(ctx.Message is string)ctx.Respond("hey");return Actor.Done;});var pid = Actor.Spawn(props);var reply = pid.RequestAsync<object>("hello").Result;Console.WriteLine(reply);}
}

相关文章:

  • Akka系列---什么是Actor

  • .NET的Actor模型:Orleans

  • 在.NET中实现Actor模型的不同方式

  • 视频游戏《光环4》的Actor模型设计和实现

原文地址:https://www.oschina.net/p/protoactor


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssl1776-游乐场【图论,深搜】

题目 一个游乐场&#xff08;无向图&#xff09;&#xff0c;每个景点&#xff08;点&#xff09;都有一定的开心值&#xff08;价值&#xff09;&#xff0c;一个点只能游玩一次。然后可以从任何一个点出发&#xff0c;求可以游玩的最多项目&#xff08;连通分量&#xff09;…

JQuery $作用

作用1&#xff1a; $(function&#xff08;&#xff09;{}) $就是jQuery的省略写法 1.相当于 window.οnlοadfunction(){} 2.功能比window.onload更强大 1) window onload一个页面只能写一个,但是可以写多个$() 而不冲突 2) window onload要等整个页面加载完后再执行&#xff…

import关键字

在源文件中显式的使用import结构导入指定包下的类、接口 声明在包的声明和类的声明之间 如果需要导入多个结构&#xff0c;则并列写出即可 可以使用"xxx.*"的方式&#xff0c;表示可以导入xxx包下的所有结构 如果使用的类或接口是java.lang包下定义的&#xff0c…

信息学奥赛一本通1349-最优布线问题

【题目描述】 学校有n台计算机&#xff0c;为了方便数据传输&#xff0c;现要将它们用数据线连接起来。两台计算机被连接是指它们有数据线连接。由于计算机所处的位置不同&#xff0c;因此不同的两台计算机的连接费用往往是不同的。 当然&#xff0c;如果将任意两台计算机都用…

你知道i=i++;的含义吗?原理其实没有你想的那么简单

i和i我们都知道&#xff0c;但是你知道ii;吗&#xff1f;自上学时&#xff0c;老师就说i是先赋值再加&#xff0c;而i是先加再赋值&#xff0c;比如我们写个代码举下例子&#xff1a;i:/*** 自增案例*/public static void testZiZeng(){int i 1;int a i;System.out.println(&…

jQuery 的选择器

01、基本选择器 标签选择器 $(“a”) ID选择器 $(“#id”) $(“p#id”) 类选择器 $(“.class”) $(“h2.class”) 通配选择器 $("*") 并集选择器$(“elem1,elem2,elem3”) <script type"text/javascript">$(function(){/*******id选择器*********…

学会思考,而不只是编程

中国人常说“授之以鱼不如授之以渔”。如果说教授编程是授之以鱼&#xff0c;那么教授计算机科学就是授之以渔。为什么说学习计算机科学比学会编程要重要得多&#xff1f;来听听Yevgeniy Brikman的解释。 现如今&#xff0c;似乎每个人都在学习编程&#xff1a;Bill Gates、Ma…

ssl1562-局域网

局域网 题目 就是一个图&#xff0c;求最小生成树&#xff0c;然后求被去除的边的价值。 输入 用线来表示联通 5 5 1 2 8 1 3 1 1 5 3 2 4 5 3 4 2 输出 去除的边的总价值 8 解题思路 求出最小生成树的价值然后线的总值减去最小生成树的价值 代码 #include<…

什么?java中居然可以执行js代码了?真是不知者不怪

今天在书上看的&#xff0c;java中可以直接调用js的函数了&#xff0c;言外之意就是java已经支持外部的脚本语言了&#xff08;在运行期解释执行的&#xff09;&#xff0c;查了查&#xff0c;jdk从1.6之后开始支持的&#xff0c;1.6之前不可以。 为什么Java这种编译语言还需要…

jQuery 操作元素

01、操作元素的属性 $(function(){$("#but").click(function(){//获得元素的对象var inp$("#zh");//JQ获得属性 inp.attr("value")&#xff1a;获得的默认的值console.log(inp.attr("type")"----"inp.attr("name&q…

用 Docker Machine 创建 Azure 虚拟主机

搭建环境向来是一个重复造轮子的过程&#xff0c;Docker Machine 则把用户搭建 Docker 环境的各种方案汇集在了一起。笔者在《Docker Machine 简介》一文中演示了使用 Docker Machine 在本地的 vSphere 主机中安装 Docker 环境。但是在云计算大爆炸的今天&#xff0c;真正让我们…

ssl2345-繁忙的都市

题目 一个无向图&#xff0c;求最小生成树里权值最大的那条边 输入 第一行有两个整数n,m表示有n个店&#xff0c;m条边。接下来m行是对每条边的描述&#xff0c;u, v, c表示点u和v之间有边&#xff0c;权值为c。(1≤n≤300&#xff0c;1≤c≤10000) 4 5 1 2 3 1 4 5 2 4…

JQuery 事件绑定

<script type"text/javascript">$(function(){/******单击事件的绑定********/$("#bu1").click(function(){alert("单击事件");})$("#bu1").dblclick(function(){})$("#bu1").blur(function(){ })/******绑定多个事件…

JDK中主要的包

java.lang----包含一些Java语言的核心类&#xff0c;如String、Math、Integer、 System和 Thread&#xff0c;提供常用功能java.net----包含执行与网络相关的操作的类和接口。java.io ----包含能提供多种输入/输出功能的类。java.util----包含一些实用工具类&#xff0c;如定义…

振华重工携手微软,开启港口运营数字化转型新纪元

上海振华重工&#xff08;集团&#xff09;股份有限公司&#xff08;ZPMC&#xff09;是重型装备制造行业的知名企业&#xff0c;是港口机械的领军者。企业的港口机械目前已销往93个国家和地区&#xff0c;全球占有率高达82%&#xff0c;多年保持行业领先的地位。 转型大计提上…

在JavaFX程序中嵌入Swing内容

转载自 在JavaFX程序中嵌入Swing内容 本教程描述如何在JavaFX应用程序中嵌入Swing组件。本文将讨论线程限制并提供一个可运行的应用程序来说明在JavaFX应用程序中嵌入带HTML内容的Swing按钮&#xff0c;以及Swing与JavaFX按钮间的协作性。 从JavaFX 2.0版本开始&#xff0c;…

你胆敢不加break试试?

我们经常在实际开发中会用到一些转换类&#xff0c;比如在金融界中&#xff0c;我们需要将1转换为“壹”&#xff0c;2转换成“贰”。还有类似这样的需求&#xff0c;食堂在一周内每天的菜单都是不一样的&#xff0c;周一为鱼香肉丝鸡腿&#xff0c;周二为爆炒土豆丝鲅鱼&#…

三大特性之继承性

一、继承性的好处&#xff1a; ① 减少了代码的冗余&#xff0c;提高了代码的复用性 ② 便于功能的扩展 ③ 为之后多态性的使用&#xff0c;提供了前提 二、继承性的格式&#xff1a; class A extends B{} A:子类、派生类、subclass B:父类、超类、基类、superclass 2.1体现&…

ssl2346-联络员【图论,最小生成树】

题目 一个图&#xff0c;给几条固定的边&#xff0c;求最小生成树 输入 第一行n&#xff0c;m表示n个点&#xff0c;有m条边&#xff0c;每行四个非负整数&#xff0c;p,u,v,w 当p1时&#xff0c;表示这个边为固定边&#xff08;必须要&#xff09;&#xff1b;当p2时&#…

JQuery 动画效果

掌握要点 显示隐藏show() hide() 改变width、height、opacity 淡入淡出fadeIn() fadeOut() 改变opacity 滑入滑出slideDown() slideUp() 改变height&#xff08;对于img同时改变height和width&#xff09; 隐藏的显示/显示的隐藏 toggle() 参考网站&#xff1a;http://www.jq2…