Ponylang是一种无锁、无数据区的新语言。我的印象是,为了实现这一点,Ponylang查看了“如果两个线程可以看到相同的对象,那么写入必须禁止另一个线程的任何其他操作”这句话,并使用类型系统来强制执行各种特殊情况。例如,有一个类型描述符,说“没有其他线程可以看到这个对象”,还有一个说,“这个引用是只读的”,还有很多其他的。无可否认,我对此的理解很差,而且ponylang的文档中也缺少示例。
我的问题是:在基于锁的语言中,有没有什么操作是完全不能翻译成基于类型的系统的?另外,有没有这样的操作不能翻译成有效的构造呢?
发布于 2016-02-02 01:54:10
[...] 基于锁的语言是否存在根本无法翻译成 ponylang 的基于类型的系统的操作?
在 Pony 中,引用功能的全部意义在于防止您做其他语言中可能甚至微不足道的事情,例如在两个线程之间共享一个列表并同时向其中添加元素。所以,是的,在像 Java 这样的语言中,您可以在 Pony 中以一种不可能的方式在线程之间共享数据。
此外,是否存在无法在 ponylang 中转化为有效结构的操作?
如果你问基于锁的语言在某些情况下是否比小马更有效,那么我想是的。您总是可以创建一个受益于 N 个线程和 1 个锁的情况,并且当您使用强制您在消息中传递信息的参与者模型时更糟。
这并不是要在所有情况下都将actor模型视为优越的。这是一种不同的并发模型,问题的解决方式也不同。例如,要计算 N 个值并将结果累积到一个列表中:
显然,每个任务都会向列表中添加一个值,每个参与者 B 会将值发送给参与者 A。根据参与者之间的消息传递方式,发送 N 个值可能比锁定 N 次要慢。通常它会更慢,但另一方面,您永远不会得到一个意外大小的列表。
发布于 2016-01-28 14:47:55
我相信它可以做任何事情,一个共享的一切+锁可以做的。只有iso对象和consume,它基本上是一个纯粹的消息传递系统,可以做锁系统所做的任何事情。正如在mach3中一样,linux可以做任何事情。
https://stackoverflow.com/questions/30703254
复制相似问题