问题 为什么CSP实施仅涵盖渠道?


在书中讲述 传递顺序过程 花了很多时间来定义事件,这些事件没有方向,可能涉及多个独立的过程。

仅在第4章中介绍了引导的渠道,这些渠道是针对2个流程的。

然而,包括occam,Go,LuaCSP和clojure.core.async在内的所有CSP实现仅实现了通道。

尽管大多数实际问题都可以用(广播)频道解决,但我想知道为什么这本书花费了很多时间在他们身上而没有人使用它们。


13085
2017-07-05 09:49


起源



答案:


在Occam-pi中,障碍是渠道的重要辅助手段。有了障碍,每个登记过程都会等待障碍,直到他们全部完成。此时他们都被释放了。这是非通道形式的CSP事件的示例。

Occam-pi还使用频道进行扩展会合。这是一种完全不同的频道使用模式,非常类似于Ada的集合点。


2
2017-07-06 13:59



这与Java中的CyclicBarrier概念相同吗? docs.oracle.com/javase/7/docs/api/java/util/concurrent/... - Pepijn
我认为它们在概念上大致相似。我不知道它们在细节上是否相同。 Occam-Pi屏障具有高效的实现(与其所有同步原语一样)。 - Rick-777


答案:


在Occam-pi中,障碍是渠道的重要辅助手段。有了障碍,每个登记过程都会等待障碍,直到他们全部完成。此时他们都被释放了。这是非通道形式的CSP事件的示例。

Occam-pi还使用频道进行扩展会合。这是一种完全不同的频道使用模式,非常类似于Ada的集合点。


2
2017-07-06 13:59



这与Java中的CyclicBarrier概念相同吗? docs.oracle.com/javase/7/docs/api/java/util/concurrent/... - Pepijn
我认为它们在概念上大致相似。我不知道它们在细节上是否相同。 Occam-Pi屏障具有高效的实现(与其所有同步原语一样)。 - Rick-777


首先,这本书 发生在以前 实施。因此,您的问题更好地表达为:

为什么没有CSP的实施把重点放在事件上,即使这本书非常强调它们。

基本上,将事件作为语言的一等公民,使其具有一定的使用特性,这可能对于a 通用编程语言

此外,您可以轻松地在通道(和其他构造)上实现事件,以防您进入 事件驱动编程


9
2017-07-05 10:06



后一种说法是同义的。 CSP和频道自然地提供了一种事件驱动的风格。不同的是渠道 不要 需要回调来处理事件。 - Rick-777
它比事件锁定/解锁更多。通过渠道传播的东西可以是任何东西。 - thwd