黑板上的概念是,多個獨立進程運行,併爲他們制定出它的一部分更新黑板。一個典型的例子是語音識別。輸入數據是要識別的音頻。音頻可以分段,多個線程將片段與單詞匹配。當每個線程找到匹配的單詞時,他們用翻譯來更新黑板,直到這一點。隨着短語開始彙編,另一個線程可以進行語法檢查,以驗證各種識別器線程正在做出的選擇。如果一個詞的置信度低,違反語法,那麼可以重新尋找替代品。這甚至可能會導致重新分區音頻數據,因爲口吃和暫停解決。
由於短語成爲句子,所以可以拍攝更大的視圖,並且可以解決同音字的各種選項(pair,pare)。所有這些都是通過讓黑板對所有進程開放而完成的,而「鎖」只是在各種結果滾入時才應用。
將數據庫用作黑板有一定意義,因爲您可以「免費」獲取事務, ,但這取決於數據更新和重讀的積極性。如果它發生得很快,那麼往返次數會加起來,並使內存結構更加合理。
您對中介的想法很有意義,因爲它創建了一個單一的鎖定點......並且黑板算法很少遇到A-> B,B-> A樣式的死鎖,因爲它們先要求提供所有數據元素。除此之外,放棄鎖定並不是一個很大的懲罰,因爲各種子任務隨着數據的推出一直會重新開始。董事會的用戶在他們擁有的數據已經過時時需要通知他們,這可以通過使用最新數據重新啓動任務的回調來完成。
就工作流程的評論而言:這裏的主要區別在於,大多數工作流程都是由主進程協調的,主進程採用剛進入的狀態並決定哪些狀態可供數據移入。雖然可能有獨立的參與者,但他們很少通過創造更好的結果(其他任務將使用)來參與「超越」對方。換句話說,工作流通常是一組非常有限的狀態,數據可以通過,而黑板幾乎是免費的 - 對於所有獨立活動。 (也就是說,黑板可能在你的工作流程後面:http://sunsite.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-247/FORUM_15.pdf)
我想不出任何我見過的模式的C#示例,而且我所做的工作類型沒有多少要求(計算是確定性的)。做一些搜索找到其他語言的參考,但沒有一個看起來質量很高。
我也很想知道它比「工作流程」更好。 – Mank 2009-07-30 05:56:42