scala的akka和go的goroutine有什么区别

区别:goroutine实现的是csp,通过独立的channel传递信息。akka实现的是actor,消息通过actor拥有mailbox接收。akka是通过线程池实现的actor,线程是有限的,而goroutine运行在用户态线程上,受go运行时抢占式调度。二者都是通过消息通信的机制来避免竞态条件,但具体的抽象和实现上有些差异。

scala的akka和go的goroutine有什么区别-Worktile社区

goroutine实现的是csp,通过独立的channel传递信息。akka实现的是actor,消息通过actor拥有mailbox接收。

仅仅上面的不够特化。akka是通过线程池实现的actor,线程是有限的,假如一个actor阻塞一个线程(例如一个阻塞io),可能会影响其他的actor,类似于协调型的调度。而goroutine运行在用户态线程上,受go运行时抢占式调度。

二者都是通过消息通信的机制来避免竞态条件,但具体的抽象和实现上有些差异。

CSP模型里消息和Channel是主体,处理器是匿名的。

也就是说发送方需要关心自己的消息类型以及应该写到哪个Channel,但不需要关心谁消费了它,以及有多少个消费者。Channel一般都是类型绑定的,一个Channel只写同一种类型的消息,所以CSP需要支持alt/select机制,同时监听多个Channel。Channel是同步的模式(Golang的Channel支持buffer,支持一定数量的异步),背后的逻辑是发送方非常关心消息是否被处理,CSP要保证每个消息都被正常处理了,没被处理就阻塞着。

Actor模型里Actor是主体,Mailbox(类似于CSP的Channel)是透明的。也就是说它假定发送方会关心消息发给谁消费了,但不关心消息类型以及通道。所以Mailbox是异步模式,发送者不能假定发送的消息一定被收到和处理。Actor模型必须支持强大的模式匹配机制,因为无论什么类型的消息都会通过同一个通道发送过来,需要通过模式匹配机制做分发。它背后的逻辑是现实世界本来就是异步的,不确定(non-deterministic)的,所以程序也要适应面对不确定的机制编程。自从有了并行之后,原来的确定编程思维模式已经受到了挑战,而Actor直接在模式中蕴含了这点。

延伸阅读:

什么是go?

Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。

Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。

罗伯特·格瑞史莫(Robert Griesemer),罗布·派克(Rob Pike)及肯·汤普逊(Ken Thompson)于2007年9月开始设计Go,稍后Ian Lance Taylor、Russ Cox加入项目。Go是基于Inferno操作系统所开发的。Go于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后来追加了Windows系统下的实现。在2016年,Go被软件评价公司TIOBE 选为“TIOBE 2016 年优异语言”。 目前,Go每半年发布一个二级版本(即从a.x升级到a.y)。

文章标题:scala的akka和go的goroutine有什么区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/38585

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编站长
上一篇 2023年2月17日 上午2:25
下一篇 2023年2月17日 上午2:27

相关推荐

  • C 语言中 extern 变量和 global 变量有什么区别

    区别是:在C语言中 extern 是关键字,global 不是。一个变量是不是 global 变量是由作用域决定的,当变量在全局作用域中声明时,这个变量就是全局变量。当 extern 修饰一个变量时,就表明这个变量并不是在这里声明的。 在C语言中 extern 是关键字,global 不是。一个变量…

    2023年2月17日
    27700
  • cnc编程与Java编程有什么区别

    cnc编程与Java编程这两个完全是不同的东西,一个面向上位机,一个面向下位机。cnc机床是一种技术集成度及自动化程度很高的机电一体化加工的配置。Java是一种编程语言,被特意设计用于互联网的分布式环境。 cnc Computerized Numerical Control指的是数控加工中心,也就是…

    2023年2月7日
    45900
  • 项目开发进度管理软件有哪些

    项目开发进度管理软件有:一、Worktile;二、PingCode;三、进度猫;四、Podio;五、Asana;六、ActiveCollab。Worktile 是国内的一款老牌通用项目进度管理系统,Worktile 具备单项目、项目集、甘特图、项目集甘特图等,能随时查看目前整个公司都有哪些项目,当前…

    2023年4月29日
    9400
  • 低代码软件:简化应用开发的高效工具

    随着企业数字化转型的不断推进,对于软件开发速度、效率和成本的要求也在不断提高。与此同时,随着技术发展,低代码技术逐渐成为了企业快速实现数字化转型的利器。如今,低代码已经广泛应用于各行各业,帮助企业提高应用开发效率、降低开发成本、提高软件质量,满足企业对数字化转型的需求。

    2023年8月31日
    10800
  • erp有哪些主要功能模块

    erp的主要功能模块:1、财务管理功能模块;2、会计核算功能模块;3、生产控制管理功能模块;4、采购管理功能模块;5、库存控制功能模块等。财务管理功能模块是指,企业的财务管理人员可通过ERP系统中的决策支持智能系统,了解企业的经营状况。 1、财务管理功能模块 企业的财务管理人员可通过ERP系统中的决…

    2023年1月5日
    24200
  • 一个刚组建的团队怎么去管理

    管理一个刚组建的团队要做到:一、明确目标和角色;二、建立有效的沟通;三、促进团队合作;四、建立积极的工作文化;五、提供适当的培训和发展机会;六、有效地解决问题。团队成员需要清楚地知道他们的角色和目标。领导者需要确保所有成员理解他们的任务。 一、明确目标和角色 团队成员需要清楚地知道他们的角色和目标。…

    2023年4月30日
    17400
  • 需求优先级排序方法是什么

    需求优先级排序方法:1、对比法;2、单参数法/核心指标法;3、双参数法/三参数法;4、多参数法。对比法本质上是利用我们人类在相对比较的天性和能力,典型的对比法有Kano模型、MoSCoW模型、马斯洛需要层次模型和Pair-wise对比矩阵。 1、对比法 本质上是利用我们人类在相对比较的天性和能力。 …

    2023年1月8日
    73900
  • Java类加载器(ClassLoader)的实际使用场景有哪些

    实际使用场景有:1、依赖冲突;2、热加载;3、热部署;4、加密保护。依赖冲突指基于maven的pom进制可以方便的进行依赖管理,但是由于maven依赖的传递性,会导致我们的依赖错综复杂,这样就会导致引入类冲突的问题。 1、依赖冲突 做过多人协同开发的大型项目的同学可能深有感触。基于maven的pom…

    2023年2月7日
    22900
  • 日程软件哪个好

    好用的日程软件有:一、滴答清单;二、奇妙日程;三、TickTick日程管理;四、时间表;五、高效Todo;六、365日历;七、计划表;八、微约日历;九、魔女执事;十、极致办公。滴答清单是一款专注于日程安排的人气管理类应用,软件功能强大。 一、滴答清单 一款专注于日程安排的人气管理类应用。软件功能强大…

    2023年3月31日
    1.2K00
  • 概率和概率密度的区别是什么

    概率和概率密度的区别有以下几点:1、定义不同;2、性质不同。其中,定义不同是指,概率是一个面积,它表示的是某个事件发生的可能性的大小,而概率密度是一个函数值。概率密度是概率的时空分布,反映概率的大小分布情况。 一、定义不同 1、概率密度 对于随机变量X的分布函数F(x),如果存在非负可积函数f(x)…

    2023年2月17日
    1.4K00

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部