2009-07-30 67 views
9

有沒有人對'The Pragmatic Programmer'第165頁Blackboard概念有任何想法?任何人都有這種使用黑板模式的想法嗎?

我想有幾個小的子系統(DLL和EXE)大多彼此獨立。有一些程序集將被所有EXE使用。這些程序集將幾乎全部使用相同的數據庫。而不是在這些程序集之間使用接口進行通信,Blackboard類型模式不會提供更多的獨立性嗎?

我在想一些通過事件通知並且所有子系統通信都通過它的中介類型結構。這使得syb系統非常獨立。調解員將保存它應該廣播的所有通知的名稱。然後,訂閱者將通過名稱來監聽特定事件,但始終訂閱相同的(或者可能傳遞名稱作爲參數)介體事件。

下面是一些關於它的更多的討論:http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_22829492.html

+0

我也很想知道它比「工作流程」更好。 – Mank 2009-07-30 05:56:42

回答

13

黑板上的概念是,多個獨立進程運行,併爲他們制定出它的一部分更新黑板。一個典型的例子是語音識別。輸入數據是要識別的音頻。音頻可以分段,多個線程將片段與單詞匹配。當每個線程找到匹配的單詞時,他們用翻譯來更新黑板,直到這一點。隨着短語開始彙編,另一個線程可以進行語法檢查,以驗證各種識別器線程正在做出的選擇。如果一個詞的置信度低,違反語法,那麼可以重新尋找替代品。這甚至可能會導致重新分區音頻數據,因爲口吃和暫停解決。

由於短語成爲句子,所以可以拍攝更大的視圖,並且可以解決同音字的各種選項(pair,pare)。所有這些都是通過讓黑板對所有進程開放而完成的,而「鎖」只是在各種結果滾入時才應用。

將數據庫用作黑板有一定意義,因爲您可以「免費」獲取事務, ,但這取決於數據更新和重讀的積極性。如果它發生得很快,那麼往返次數會加起來,並使內存結構更加合理。

您對中介的想法很有意義,因爲它創建了一個單一的鎖定點......並且黑板算法很少遇到A-> B,B-> A樣式的死鎖,因爲它們先要求提供所有數據元素。除此之外,放棄鎖定並不是一個很大的懲罰,因爲各種子任務隨着數據的推出一直會重新開始。董事會的用戶在他們擁有的數據已經過時時需要通知他們,這可以通過使用最新數據重新啓動任務的回調來完成。

就工作流程的評論而言:這裏的主要區別在於,大多數工作流程都是由主進程協調的,主進程採用剛進入的狀態並決定哪些狀態可供數據移入。雖然可能有獨立的參與者,但他們很少通過創造更好的結果(其他任務將使用)來參與「超越」對方。換句話說,工作流通常是一組非常有限的狀態,數據可以通過,而黑板幾乎是免費的 - 對於所有獨立活動。 (也就是說,黑板可能在你的工作流程後面:http://sunsite.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-247/FORUM_15.pdf

我想不出任何我見過的模式的C#示例,而且我所做的工作類型沒有多少要求(計算是確定性的)。做一些搜索找到其他語言的參考,但沒有一個看起來質量很高。

+0

謝謝。作爲內聯網上分佈式應用程序之間的中央通信,它不會很好嗎? – 4thSpace 2009-07-31 04:26:16

相關問題