基于 Actor 的编程语言中的死锁

问题描述 投票:0回答:3

在 Scala 或 Elixir 这样的基于 Actor 的语言中还会发生死锁吗?如果是,如何检测和避免它们?

scala erlang deadlock actor
3个回答
2
投票

在 Erlang 中这是可能的。您可以有 2 个进程都在等待对方发送消息。一般来说,这不是一个大问题。

但在大多数情况下,你必须努力才能实现这一目标。


1
投票

Scala 不是一种基于 Actor 的语言。 Akka 只是一个库(恕我直言,它经常被滥用)。

可能会发生死锁,因为您可以在

receive
方法内运行任意代码。 为了防止这种情况 - 不要直接在参与者代码中使用任何阻塞/同步,也不要调用内部使用阻塞的外部对象的方法。


0
投票

如果大多数参与者的邮箱(队列)已满,他们可能会陷入僵局。在实际系统中,内存是有限的,队列也不是无限的。

© www.soinside.com 2019 - 2024. All rights reserved.