從Joe Armstrong's dissertation,他指定一個基於Actor的程序應該按照以下三個步驟進行設計。事情是,我不明白這些步驟如何映射到現實世界的問題或如何應用它們。這是喬的原始建議。如何設計和構建一個使用Actor的程序
- 我們確定我們現實世界活動中的所有真正併發活動。
- 我們確定併發活動之間的所有消息通道。
- 我們寫下所有可以在不同消息通道上流動的消息。 現在我們編寫程序。程序的結構應該嚴格遵循問題的結構。每個真實世界的併發活動都應該映射到我們的編程語言中的一個併發進程。如果將問題映射到程序的1:1映射,我們說程序與問題是同構的。
映射精確到1:1非常重要。原因是它最大限度地減少了問題與解決方案之間的概念差距。如果這個映射不是1:1,那麼程序將很快退化並變得難以理解。當使用非CO語言解決併發問題時,經常會觀察到這種退化。通常,讓程序運行的唯一方法是強制幾個獨立的活動由相同的語言線程或進程來控制。這導致不可避免的清晰度損失,並且使得節目容易受到複雜且不可重現的干擾錯誤的影響。
我覺得#1很容易搞清楚。它是#2(和3)我迷路的地方。爲了說明我的沮喪,我在這個要點中提出了一項小服務(Ruby service with callbacks)。
看看這個示例服務,我可以看到如何回答#1。我們有5個併發服務。
- 開始
- LoginGateway
- LogoutGateway
- 停止
- 訂閱
其中一些服務不工作(或不應該)取決於服務狀態如果服務尚未開始,則登錄/註銷/訂閱沒有意義。這種狀態信息與喬的3個步驟有什麼關係嗎?
無論如何,鑑於該要點中的示例/模擬服務,我想知道有人會設計一個程序來以Actory方式封裝這個服務。我只想看看如何應用喬的3個步驟的指南列表。寫一些代碼(任何語言)的獎勵點數。