Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在关于通信顺序进程的书中,大量时间都花在定义事件上,这些事件没有方向,可能涉及多个独立的进程。
仅在第4章中介绍了渠道,这些渠道是有针对性的,涉及2个过程。
然而,包括 occam、Go、LuaCSP 和 clojure.core.async 在内的所有 CSP 实现都只实现了通道。
尽管大多数实际问题都可以通过(广播)渠道解决,但我想知道为什么这本书花这么多时间在这些问题上,而没有人使用它们。
好吧,首先这本书发生在实现之前。因此,您的问题最好表述为:
为什么 CSP 的实现没有将重点放在事件上,尽管这本书非常强调它们。
基本上,使事件成为一种语言的一等公民会赋予它一定的使用特异性,这对于通用编程语言来说可能过于狭窄。
此外,如果您从事事件驱动编程,您可以轻松地在通道(和其他结构)上实现事件。
在 Occam-pi 中,障碍是通道的重要附属物。使用屏障,每个已注册的进程都会在屏障上等待,直到他们都这样做了。此时他们都被释放了。这是 CSP 事件的非通道形式的示例。
Occam-pi 还具有使用通道的扩展集合。这是一种完全不同的通道使用模式,与 Ada 中的集合点非常相似。