在關於Communicating Sequential Processes的書中,花費了很多時間來定義事件,這些事件沒有方向,可能涉及多個獨立的過程。爲什麼CSP實施只覆蓋渠道?
只有在第4章介紹的渠道,這是引導和涉及2個進程。
然而,包括occam,Go,LuaCSP和clojure.core.async的CSP的所有實現僅實現通道。
儘管大多數實際問題都可以通過(廣播)渠道解決,但我想知道爲什麼這本書花費了很多時間在他們身上,而沒有人使用它們。
在關於Communicating Sequential Processes的書中,花費了很多時間來定義事件,這些事件沒有方向,可能涉及多個獨立的過程。爲什麼CSP實施只覆蓋渠道?
只有在第4章介紹的渠道,這是引導和涉及2個進程。
然而,包括occam,Go,LuaCSP和clojure.core.async的CSP的所有實現僅實現通道。
儘管大多數實際問題都可以通過(廣播)渠道解決,但我想知道爲什麼這本書花費了很多時間在他們身上,而沒有人使用它們。
在Occam-pi中,障礙物是通道的重要附件。如果有障礙,每個註冊過程都會在屏障上等待,直到完成全部過程。在這一點上,他們都被釋放。這是CSP事件的非渠道形式的一個例子。
Occam-pi還具有使用通道的擴展會合。這是一種截然不同的渠道使用模式,與Ada中的會合非常相似。
那麼首先該書的happened before這個實現。因此,你的問題更好地制定爲:
爲什麼CSP的實施沒有把重點放在事件上,盡管這本書強調了它們。
基本上,使活動成爲一種語言的一流公民會給它一定的使用特異性,這對於general purpose programming language來說可能太窄了。
此外,您可以輕鬆地在頻道(和其他結構)上實施事件,以防您進入event driven programming。
這後一種說法是同源的。 CSP和渠道自然會提供事件驅動的風格。區別在於頻道*不需要回調來處理事件。 –
它比事件更加鎖定/解鎖。通過頻道傳輸的東西可以是任何東西。 – thwd
這與Java中的CyclicBarrier是一樣的概念嗎? http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html – Pepijn
我認爲它們在概念上大致相似。我不知道他們是否細緻。 Occam-Pi障礙具有高效的實現(所有同步原語也如此)。 –