在关于Communicating Sequential Processes的书中,花了很多时间来定义事件,这些事件没有方向,可能涉及多个独立的过程。
仅在第4章中介绍了引导的渠道,这些渠道是指导性的,涉及2个流程。
然而,包括occam,Go,LuaCSP和clojure.core.async在内的所有CSP实现都只实现了通道。
尽管大多数实际问题都可以通过(广播)频道解决,但我想知道为什么这本书花费了很多时间在他们身上而没有人使用它们。
答案 0 :(得分:9)
首先是书happened before的实施。因此,您的问题更好地表述为:
为什么没有CSP的实施把重点放在事件上,即使这本书极大地强调了它们。
基本上,将事件作为语言的一等公民会使其具有某种使用特性,对general purpose programming language来说可能过于狭窄。
此外,如果你进入event driven programming,你可以轻松地在频道(和其他结构)上实现事件。
答案 1 :(得分:2)
在Occam-pi中,障碍是渠道的重要辅助手段。有了障碍,每个登记过程都会等待障碍,直到他们全部完成。此时他们都被释放了。这是非渠道形式的CSP事件的一个例子。
Occam-pi还使用频道进行扩展会合。这是一种完全不同的频道使用模式,非常类似于Ada的集合点。