基于Agent/Actor的并发设计的设计模式

nso*_*so1 21 erlang scala agent actor

最近我开始使用支持演员/代理/无共享架构的替代语言 - 即.scala,clojure等(clojure也支持共享状态).

到目前为止,我所阅读的大部分文档都集中在介绍级别.我正在寻找的是四人帮中更高级的文档,而不是基于什么共享.

为什么?它有助于改变设计思维的变化.简单的例子很简单,但在现实世界的Java应用程序(单线程)中,您可以拥有1000个具有复杂关系的成员的对象图.但是,基于代理的并发开发,它在设计大型系统时引入了一整套全新的思路.即.代理粒度 - 一个代理应管理多少状态 - 对性能的影响等,或者是将共享状态对象图映射到基于代理的系统的良好模式.将域模型映射到设计的技巧.讨论不是关于技术,而是关于如何在设计中最好地使用该技术(现实世界"复杂"的例子会很棒).

小智 11

即使我不能提出任何可以直接为您提供设计模式的现实世界的例子,也有一些地方可以开始.

首先是围绕概念正确包裹你的头部.帮助您实现这一目标的一本书是 Erlang Guru Joe Armstrong编写的软件错误的情况下制作可靠的分布式系统,其中以非常易于理解的方式解释了面向并发编程.它实际上是博士学位.论文,但不要让那吓到你.与大多数常见的教科书相比,它更容易阅读,也更便宜.

查看实际系统通常意味着您必须过多地学习实际语言,因此评估事物也是有意义的.对于Erlang,文档 提供了设计方法和行为(Erlang speek for design pattern libraries).这将说明此设置中最常用的设计模式.事实证明,这些在构建大规模系统方面是有效的,即数百万行代码(相当于Java等其他语言的4到10个因子)和在分布式机器集群中的一台机器上运行的并发进程的数量.最近的一个真实的现场系统的例子是 Facebook Chat.

对于其他框架,我恐怕不能真正帮助你.


Jos*_*man 5

“参与者”本身就是并发编程的统一模式(异步消息队列加上用于处理它的执行上下文),但是有许多设计模式可以帮助指定基于代理的系统的方面或元素。许多最常见的可以在维基百科关于并发模式的文章中找到。一些亮点:

如果您还没有接触过Akka ,您可能会对它感兴趣——它是一个运行在 JVM 上的“纯粹”事件驱动的 Actor 框架。


Sim*_*mon 1

在这里问了一个类似的问题,其中有一些可能有帮助的合理答案。我正在仔细观察你的。我还没有找到真正对我有帮助的东西,但我正在积极寻找。

我认为思维转变是迈向并发架构和语言的最大障碍,在这个障碍被破解之前,开发人员将坚持使用易于学习的 MS 风格范例。为了使其真正成为主流,它需要进入学校并与 C# 和 VB 一起教授。

我对2080程序员问题的回答是“同时”。