[...] 基于锁的语言是否存在根本无法翻译成 ponylang 的基于类型的系统的操作?
在 Pony 中,引用功能的全部意义在于防止您做其他语言中可能甚至微不足道的事情,例如在两个线程之间共享列表并同时向其中添加元素。所以,是的,在像 Java 这样的语言中,您可以在 Pony 中以一种不可能的方式在线程之间共享数据。
此外,是否存在无法在 ponylang 中转化为有效结构的操作?
如果你问基于锁的语言在某些情况下是否比小马更有效,那么我想是的。您总是可以创建一个受益于 N 个线程和 1 个锁的情况,并且当您使用强制您在消息中传递信息的参与者模型时更糟。
这并不是要在所有情况下都将actor模型视为优越的。这是一种不同的并发模型,问题的解决方式也不同。例如,要计算 N 个值并将结果累积到一个列表中:
- 在线程模型中,您会
- 创建线程池,
- 创建线程安全列表,
- 创建 N 个任务共享列表,并且
- 等待 N 个任务完成。
- 在演员模型中,您会
- 创建一个等待 N 个值的演员 A,
- 创建 N 个演员 B 共享演员 A,以及
- 等待 A 生成一个列表。
显然,每个任务都会向列表中添加一个值,每个参与者 B 会将值发送给参与者 A。根据参与者之间的消息传递方式,发送 N 个值可能比锁定 N 次要慢。通常它会更慢,但另一方面,您永远不会得到一个意外大小的列表。