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

Pep*_*ijn 11 lua clojure occam-pi go

在关于通信顺序进程的书中,花费了大量时间来定义事件,这些事件没有方向,可能涉及多个独立的进程.

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

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

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

thw*_*hwd 9

首先,这本书是在实施之前发生的.因此,您的问题更好地表述为:

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

基本上,使事件成为语言的一等公民,使其具有一定的使用特性,对于通用编程语言而言可能过于狭窄.

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

  • 后一种说法是同义的.CSP和频道自然地提供了一种事件驱动的风格.不同之处在于channel*不需要回调来处理事件. (2认同)

Ric*_*777 2

在奥卡姆圆周率中,障碍是渠道的重要附属物。通过屏障,每个注册的进程都会等待屏障,直到它们全部完成为止。至此,他们全部被释放了。这是非通道形式的 CSP 事件的示例。

Occam-pi 还具有使用通道的扩展交会点。这是一种完全不同的通道使用模式,与 Ada 中的集合点非常相似。