2013-07-05 25 views
11

在關於Communicating Sequential Processes的書中,花費了很多時間來定義事件,這些事件沒有方向,可能涉及多個獨立的過程。爲什麼CSP實施只覆蓋渠道?

只有在第4章介紹的渠道,這是引導和涉及2個進程。

然而,包括occam,Go,LuaCSP和clojure.core.async的CSP的所有實現僅實現通道。

儘管大多數實際問題都可以通過(廣播)渠道解決,但我想知道爲什麼這本書花費了很多時間在他們身上,而沒有人使用它們。

回答

2

在Occam-pi中,障礙物是通道的重要附件。如果有障礙,每個註冊過程都會在屏障上等待,直到完成全部過程。在這一點上,他們都被釋放。這是CSP事件的非渠道形式的一個例子。

Occam-pi還具有使用通道的擴展會合。這是一種截然不同的渠道使用模式,與Ada中的會合非常相似。

+0

這與Java中的CyclicBarrier是一樣的概念嗎? http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html – Pepijn

+0

我認爲它們在概念上大致相似。我不知道他們是否細緻。 Occam-Pi障礙具有高效的實現(所有同步原語也如此)。 –

9

那麼首先該書的happened before這個實現。因此,你的問題更好地制定爲:

爲什麼CSP的實施沒有把重點放在事件上,盡​​管這本書強調了它們。

基本上,使活動成爲一種語言的一流公民會給它一定的使用特異性,這對於general purpose programming language來說可能太窄了。

此外,您可以輕鬆地在頻道(和其他結構)上實施事件,以防您進入event driven programming

+2

這後一種說法是同源的。 CSP和渠道自然會提供事件驅動的風格。區別在於頻道*不需要回調來處理事件。 –

+1

它比事件更加鎖定/解鎖。通過頻道傳輸的東西可以是任何東西。 – thwd