Концепция классной доски заключается в том, что несколько независимых процессов запускаются и обновляют классную доску, когда они ее обрабатывают. Классическим примером является распознавание речи. Входными данными является звук, который должен быть распознан. Аудио может быть сегментировано, и несколько потоков начинают сопоставлять фрагменты со словами. Когда каждый поток находит подходящие слова, он обновляет доску с переводом до этого момента. Когда фразы начинают собираться, другой поток может выполнить проверку грамматики, чтобы проверить выбор, который делают различные потоки распознавателя. Если слово имеет низкую достоверность и нарушает грамматику, произведение может быть перезапущено в поисках альтернатив. Это может даже привести к перераспределению аудиоданных при разрешении заиканий и пауз.
По мере того, как фразы становятся предложениями, могут быть взяты еще более широкие представления и разрешены различные варианты гомофонов (пара, пара). Все это достигается за счет того, что доска открыта для всех процессов и «блокировки» применяются только по мере появления различных результатов.
Использование базы данных в качестве вашей доски имеет некоторый смысл, потому что вы получаете транзакции «бесплатно», но это будет зависеть от того, насколько активно данные обновляются и перечитываются. Если это происходит очень быстро, круговые поездки суммируют и делают структуру памяти более разумной.
Ваша идея о посреднике имеет смысл, поскольку она создает единую точку блокировки ... и алгоритмы классной доски редко встречают взаимоблокировки стиля A-> B, B-> A, потому что они запрашивают все элементы данных заранее. Кроме того, отказ от блокировки не является большим штрафом, так как различные подзадачи будут перезапускаться все время по мере поступления данных. Подписчики на плате должны будут получать уведомления, когда данные, которые они имеют, устарели, что можно сделать с помощью обратных вызовов, которые перезапустят задачу с самыми новыми данными.
Что касается комментария о рабочем процессе: основное отличие здесь состоит в том, что большинство рабочих процессов координируются главным процессом, который принимает только что введенное состояние и принимает решения относительно того, какие состояния становятся доступными для перемещения данных. Несмотря на то, что могут быть независимые актеры, они редко вовлекаются в «превосходство» друг друга, создавая лучшие результаты (которые затем будут использовать другие задачи). Другими словами, рабочий процесс обычно представляет собой очень ограниченный набор состояний, через которые проходят данные, в то время как классная доска является практически бесплатной для всех независимых действий. (Тем не менее, за вашим рабочим процессом может находиться доска: http://sunsite.informatik.rwth -aachen.de / Publications / CEUR-WS / Vol-247 / FORUM_15.pdf )
Я не могу вспомнить ни одного примера C # паттерна, который я видел, и тип работы, который я выполняю, почти не требует этого (вычисления детерминированы). При выполнении некоторых поисков можно найти ссылки на других языках, но ни один из них не выглядит качественно.