首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Erlang和Go并发编程,CSP和Actor之间的客观差异?

问Erlang和Go并发编程,CSP和Actor之间的客观差异?
EN

Software Engineering用户
提问于 2013-08-01 09:24:21
回答 1查看 5.8K关注 0票数 19

我正在研究Erlang和Go编程语言中的并发编程。根据我的发现,它们分别使用Actor模型和CSP。

但我仍然困惑于CSP和演员之间的客观区别是什么?这仅仅是理论上的不同,是同一个概念吗?

EN

回答 1

Software Engineering用户

发布于 2013-08-01 13:39:58

在实践中,差别很小:两者都代表单独的执行单元,其与外部世界的主要接口是通过消息。

不同之处在于语言的实现细节。以下是一些这样的细节:

  • 输入Go中的通道;如果要发送不同数据的消息,则需要单独的通道。对于Erlang,一个receive获取发送到进程的所有内容,并且必须与模式匹配(在Go中,您将使用一个包含多个情况的select,因此代码看起来非常相似,只是使用不同的通道)。
  • 任何人都可以读或写一个围棋频道。在Erlang中,任何人都可以发送到进程,但只有该进程才会收到。如果您想要在多个工作人员之间划分一个任务,这一点变得非常重要:在Erlang中,您需要创建一个分发过程,而Go可以简单地共享一个通道。
  • Erlang提供了在多个主机/VM上分发进程的透明路径。Goroutines仅限于一个进程(尽管有供分发的库)。
  • 错误处理是非常不同的。Erlang将每个进程视为独立的:一个进程中的错误(例如,除以-0)不会影响任何其他进程,除非您显式地链接它们(尽管等待死进程的消息将挂起)。Goroutines都在相同的进程空间中运行;除以-0将删除整个程序。
  • 在Erlang,数据是不可变的。这意味着流程与外部世界之间的所有通信都是通过消息进行的。Go允许您在goroutines之间共享状态(尽管您不应该)。

我认为,最后一点是最重要的。虽然这两种方式都使用消息作为主要的通信手段,但Erlang对状态如何以及何时发生变化提供了更强的保证。

票数 21
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/206784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档