2015-10-09 54 views
2

我知道这是不是一个理想的问题,在模拟并发电梯,但我会尽我所能来解释吧:)代表使用Erlang的消息传递

首先,情形是,我一直负责为用多台电梯创建一个建筑物的模拟。

我们假设我的建筑物由2到5部电梯和任意层数组成。这里的目标是让“人”登上电梯并前往不同的楼层。

这里的关键是同时运行每个电梯。

我已经设法在C++中为每个电梯使用一个线程。我正在努力的是想一个简单的方法来在Erlang中使用消息传递来完成此操作。我不是要求代码的答案,但更重要的是,我如何使用消息传递来解决这个问题。我当然试图阅读关于这个话题的信息,但是这让我感到困惑。

到目前为止我明白线程必须通过消息传递给对方进行通信。任何帮助澄清对此的方法非常感谢。这不是评分家庭作业或任何东西,是我的知识练习。

最终问题: 如何建立多台电梯的编程,使用消息传递(在Erlang中)独立运行。

+0

“[..]在C++中,每个电梯都有一个Thread。”在Erlang,你也会这样做。这些线程是否相互通信?在Erlang中,你使用消息传递。 –

+0

是的,他们做到了。对不起,我意识到,这只是我正在努力如何设计通过消息的电梯交互,这是有点陌生​​的概念,由于某种原因,我不能得到我的头 –

+0

你的C++线程是如何沟通的? –

回答

2

而是保持共享状态,你给每个进程自己的状态,如果有什么改变了你送与更新(及相关数据),以所有相关过程的消息

什么丹尼尔呼吁一个进程是一个Erlang进程,而不是一个线程。它们可能看起来像线程,但它们至少与它们相似,因此最好称它们为流程。

当您设计Erlang解决方案时,您需要注意不要携带C心灵套装。 Erlang的意义在于它是一种不同的范例,虽然Erlang本身是用C语言实现的,因此您在Erlang中所做的一切最终都是在C语言中运行的,但重要的是要在很大程度上忘记这一点,并使用Erlang范例。

在C中有东西需要管理,当你不仔细观察它们时,它们很棘手并且咬你。 Erlang过程非常棒,你可以根据所有的意图和目的产生无限数量的它们,而且它们并不需要任何照顾。

在丹尼尔说,在您的电梯情景中,为每个电梯产卵的过程是一个合理的设计。与Erlang一起考虑的事情之一是,像这样的情况下的numnbers并不重要,一旦你写了一个模块来模拟你的升降机,你可以产生2到5个,或者2到500万个,而你通常与Erlang一起发现它几乎没有什么区别。

我并不是说你不能设计一个破坏的实现,但说实话,一旦你习惯了Erlang,你会发现它确实适合于快速开发,没有通常的并行和并发陷阱。

当你提升你的升力场景时,正确的方法就是去了解OTP,为你的升降机使用类似gen_server的东西,以及一个监督者从它那里产生动力学(或不是)。如果您的电梯崩溃,该过程将自动被替换/重新启动。这与电梯故障(过程已经死亡,电梯不可用)以及维修工程师到来并修理它(过程重新启动;电梯再次可用)类似。在电梯中发生故障时,遇到什么情况可能是一个更高级的话题,对此,有几种可能的解决方案。

+0

那么说,但也请将我的评论的内容包括在答案中。评论是不稳定的,他们可以随时消失;)(即“发送更新消息”部分)。 –

+0

谢谢你们!大帮忙! :) –