基于 Actor 的编程语言中的死锁
Deadlocks in Actor based Programming languages
像 Scala 或 Elixir 这样基于 actor 的语言还会出现死锁吗?如果是,如何检测和避免它们?
Scala 不是基于演员的语言。 Akka 只是一个库(恕我直言,它经常被误用)。
可能会发生死锁,因为您可以在 receive
方法中 运行 任意代码。
为了防止它 - 不要直接在 actor 代码中使用任何 blocking/synchronization,也不要调用在内部使用阻塞的外部对象的方法。
在 Erlang 中这是可能的。您可以有 2 个进程都在等待对方发送消息。一般来说,这不是主要问题。
但在大多数情况下,您必须努力实现它。
像 Scala 或 Elixir 这样基于 actor 的语言还会出现死锁吗?如果是,如何检测和避免它们?
Scala 不是基于演员的语言。 Akka 只是一个库(恕我直言,它经常被误用)。
可能会发生死锁,因为您可以在 receive
方法中 运行 任意代码。
为了防止它 - 不要直接在 actor 代码中使用任何 blocking/synchronization,也不要调用在内部使用阻塞的外部对象的方法。
在 Erlang 中这是可能的。您可以有 2 个进程都在等待对方发送消息。一般来说,这不是主要问题。
但在大多数情况下,您必须努力实现它。