为什么CSP的实现只涵盖通道?

在有关通信顺序处理的书中,大量时间被用来定义事件,这些事件没有方向,并且可以涉及多个独立进程。

只有在第4章中引入了通道,这些通道是有向的,涉及2个进程。

然而,包括Occam、Go、LuaCSP和Clojure.core.async在内的所有CSP实现都只实现了通道。

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

点赞
用户532430
用户532430

首先,这本书 happened before(中文翻译:先后发生)。因此,您的问题最好改为:

为什么CSP的所有实现都没有将主要重点放在事件上,即使这本书非常强调事件。

基本上,使事件成为语言的一等公民会赋予它特定的使用特性,这可能对于通用编程语言来说过于狭窄。

此外,您可以在管道(及其他结构)上轻松实现事件,以便进入事件驱动编程

2013-07-05 10:06:30
用户204313
用户204313

在 Occam-pi 中,屏障是通道的重要补充。通过一个屏障,每个注册的进程都会在屏障上等待,直到它们全部到达。在这一点上,它们都被释放。这是一个非通道形式的 CSP 事件的例子。

Occam-pi 还使用通道拓展了会合机制。这是一种非常不同的通道使用模式,与 Ada 中的会合非常相似。

2013-07-06 13:59:22