有人对以这种方式使用黑板模式有想法吗?

2024-03-08

有人对《实用程序员》第 165 页中的 Blackboard 概念有什么想法吗?

我想要几个彼此独立的小子系统(DLL 和 EXE)。有一些程序集将被所有 EXE 使用。这些程序集几乎都使用相同的数据库。 Blackboard 类型模式不是使用接口在这些程序集之间进行通信,而是提供更多的独立性吗?

我正在考虑一些中介类型的构造,它通过事件进行通知,并且所有子系统通信都通过它。这使得 syb 系统保持非常独立。中介器将保存它应该广播的所有通知的名称。然后,订阅者将按名称侦听特定事件,但始终订阅相同的(或者可能将名称作为参数传递)中介事件。

这里还有一些关于它的讨论:http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_22829492.html http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_22829492.html


黑板的概念是多个独立的进程在处理黑板的各个部分时运行并更新黑板。一个典型的例子是语音识别。输入数据是要识别的音频。音频可以被分段,并且多个线程开始将片段与单词进行匹配。当每个线程找到匹配的单词时,它们会用到目前为止的翻译更新黑板。当短语开始组装时,另一个线程可以进行语法检查,以验证各个识别器线程所做的选择。如果某个单词的置信度较低且违反语法,则可以重新运行该文章以寻找替代词。当口吃和停顿得到解决时,这甚至可能导致重新分区音频数据。

当短语变成句子时,可以采取更大的视图,并且可以解决同音词(配对、配对)的各种选项。所有这一切都是通过让黑板对所有流程开放,并且仅在各种结果出现时才应用“锁定”来完成的。

使用数据库作为黑板是有意义的,因为您“免费”获得交易,但这取决于数据更新和重新读取的积极程度。如果发生得非常快,往返次数就会累加起来,使内存结构更加合理。

您对调解器的想法是有道理的,因为它创建了单个锁点......并且黑板算法很少遇到 A->B、B->A 式的死锁,因为它们预先要求所有数据元素。除此之外,放弃锁定并不是一个很大的惩罚,因为随着数据的滚入,各种子任务将一直重新启动。当董事会的订阅者所拥有的数据已经过时时,他们需要收到通知,这可以通过回调来完成,回调将使用最新数据重新启动任务。

至于关于工作流程的评论:这里的主要区别在于,大多数工作流程是由主流程协调的,该主流程采用刚刚输入的状态并决定哪些状态可供数据在其中移动。虽然可能存在独立的参与者,但他们很少通过创造更好的结果(其他任务将使用这些结果)来相互“超越”。换句话说,工作流程通常是数据经过的一组非常受限的状态,而黑板几乎是所有独立活动的自由空间。 (也就是说,黑板可能位于您的工作流程后面:http://sunsite.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-247/FORUM_15.pdf http://sunsite.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-247/FORUM_15.pdf)

我想不出任何我见过的模式的 C# 示例,而且我所做的工作类型对此没有太多要求(计算是确定性的)。通过一些搜索找到了其他语言的参考资料,但没有一个看起来质量很高。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有人对以这种方式使用黑板模式有想法吗? 的相关文章

  • C# 中的协变和逆变

    首先我要说的是 我是一名正在学习 C 编程的 Java 开发人员 因此 我会将我所知道的与我正在学习的进行比较 我已经使用 C 泛型几个小时了 我已经能够在 C 中重现我在 Java 中知道的相同内容 除了几个使用协变和逆变的示例 我正在读
  • 为什么派生类不使用基类的operator=(赋值运算符)?

    以下是实际问题的简化版本 而不是打电话Base operator int 代码似乎生成了一个临时的Derived对象并复制它 既然函数签名似乎完美匹配 为什么不使用基本赋值运算符 这个简化的示例没有显示任何不良影响 但原始代码在析构函数中有
  • 通过单个 GPIO 引脚转储闪存

    我正在使用 Infineon 的 XMC4500 Relax Kit 并尝试通过单个 GPIO 引脚提取固件 我非常天真的想法是通过 GPIO 引脚一次转储一位 然后用逻辑分析仪以某种方式 嗅探 数据 伪代码 while word by w
  • 使用反射获取基类的受保护属性值

    I would like to know if it is possible to access the value of the ConfigurationId property which is located in the base
  • .net Framework (.net 4.0) 中定义 Base 3 数字的类

    我正在寻找一些可以用来定义 3 基数 三进制数 的类 有什么我可以在 net 框架中使用的东西或者我需要写一些东西吗 谢谢你的帮助 您可以使用解析Convert ToInt32 s base http msdn microsoft com
  • 生成 .tail IL 指令的简单 F# 代码是什么?

    我想看看 tailIL 指令 但我一直在编写的使用尾部调用的简单递归函数显然已优化为循环 我实际上是在猜测这一点 因为我不完全确定反射器中的循环是什么样的 我绝对没有看到任何 tail不过操作码 我在项目的属性中检查了 生成尾部调用 我还尝
  • 使用 openssl 检查服务器安全协议

    我有一个框架应用程序 它根据使用方式连接到不同的服务器 对于 https 连接 使用 openssl 我的问题是 我需要知道我连接的服务器是否使用 SSL 还是 TLS 以便我可以创建正确的 SSL 上下文 目前 如果我使用错误的上下文尝试
  • 指示泛型返回动态类型的对象

    这个问题是我原来问题的后续问题here https stackoverflow com questions 2541184 using a type object to create a generic 假设我有以下泛型类 简化 class
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 如何不在类中实现接口的功能?

    面试时面试官问了我以下问题 但我不知道这个问题的答案是什么 请帮忙 如果我不想 我必须做什么 在我的类中实现一个函数 在接口中声明为 由我班实施 Edited 我正在使用 NET 和 C 如果有人可以提供 C 示例代码示例 那就太好了 Th
  • 如何将字符串转换为 Indian Money 格式?

    我正在尝试将字符串转换为印度货币格式 例如如果输入为 1234567 则输出应为 12 34 567 我编写了以下代码 但它没有给出预期的输出 CultureInfo hindi new CultureInfo hi IN string t
  • `cosf`、`sinf` 等不在 `std` 中 [重复]

    这个问题在这里已经有答案了 根据这里的讨论 我有报告了一个错误 https bugs launchpad net ubuntu source gcc 8 bug 1831385给 Ubuntu 开发者 编译以下示例 C 程序时 includ
  • 当在 Repository/UnitOrWork 之上使用 Service 类时,我应该在哪里放置逻辑不适合 Repository 的常用数据访问代码?

    In my 先前的问题 https stackoverflow com questions 24906548 using the generic repository unit of work pattern in large projec
  • 无法通过 LINQ to Entities 使用某些功能?

    我正在尝试使用 LINQ 查询在项目上实现搜索功能 由于数据有时包含带有重音符号和其他符号的字符 因此我创建了一种方法来删除这些字符以进行搜索 这是我的代码 var addresses from a in db Addresses join
  • 在 .NET 中记录 StackOverflowException

    最近 我的 NET 应用程序 asp net 网站 中出现了堆栈溢出异常 我之所以知道该异常是因为它出现在我的 EventLog 中 我知道 StackOverflow 异常无法被捕获或处理 但是有没有办法在它杀死您的应用程序之前记录它 我
  • C++ 标准中短语“构造函数没有名称”的含义

    在尝试理解 C 标准中的 构造函数没有名称 这句话时 我似乎在 clang 中发现了一个错误 有人可以证实这一点吗 VS2015 and gcc rejects this code and I think they it are is co
  • 微软语音识别速度

    我正在使用微软的语音识别器开发一个小型练习应用程序 对于我正在做的事情来说 我似乎无法让它足够快地识别单个单词 我希望能够正常说话 系统将从我所说的内容中抓取 关键字 并生成一个字符串 目前我正在使用 5 个单词的自定义语法 红 蓝 黄 绿
  • 如何强制执行特定的 UserControl 设计

    我正在编写一个基本用户控件 它将由一堆其他用户控件继承 我需要对所有这些后代控件强制执行某种设计 例如 顶部必须有几个按钮以及一个或两个标签 后代用户控件区域的其余部分可以自由放置任何内容 最初 我认为我可以将一个面板放到 Base Use
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio
  • 如何从函数返回矩阵(二维数组)? (C)

    我创建了一个生成宾果板的函数 我想返回宾果板 正如我没想到的那样 它不起作用 这是函数 int generateBoard int board N M i j fillNum Boolean exists True initilize se

随机推荐

  • 不透明度低于 childs 的容器

    我想制作我的网页background color with opacity 0 5但网页内的内容会有一个opacity 1 作为默认值 问题是如果我设置opacity 0 5对于容器 该容器内的所有子级都相同opacity value 我搜
  • 关于如何使用R和ggplot2绘制背对背图的问题

    我的目标是绘制一个金字塔图 如所附的那样 我找到了几个使用 ggplot 的示例 但我仍然在努力将我的示例应用于我的数据 或我想要绘制的数据 structure list serial c 40051004 16160610 1609031
  • Centos 无法安装 mysqli

    我无法安装Mysqli 我正在使用 Centos 6 apache 2 2 x 和 php 5 4 MySql 5 5 37 cll I tried yum install php pdo php mysqli 我看到 Loaded plu
  • 使用批处理文件发送电子邮件

    我的 Outlook 配置了我的办公室 ID 并且对批处理脚本非常陌生 通过批处理文件向我的同事发送电子邮件的最简单的方法 最简单的代码 是什么 thanks 我可以为你看到 3 个选项 最重要的是 批处理没有内置方法 但有可以从批处理文件
  • 检查优惠券是否应用于 WooCommerce 中的购物车

    我需要找到一种方法来检查优惠券是否适用于 WooCommerce 结帐 如果是这样 我想做点什么 我尝试四处寻找这个问题 但找不到解决方案 这是我正在尝试的精简版本 add action woocommerce before cart ta
  • 自定义 Clipper 贝塞尔曲线 Flutter

    我目前无法绘制贝塞尔曲线 The output I have right now is The output that I need is 我应该在此处添加什么作为贝塞尔值来获得曲线 自定义剪辑器的代码片段是 class OnBoardin
  • 链接到电子邮件附件

    您好 我正在发送电子邮件附件 使用 php 并想向我向其发送电子邮件的人指出有附件 我想通过在电子邮件的 html 正文中显示一个链接来实现此目的 因此他们所需要做的就是单击该链接 系统将尝试打开 查看附件 有谁知道这是否可能 如果是这样
  • 如何在 Tkinter 中通过一个“绑定”绑定多个小部件?

    我想知道如何用一个 绑定 绑定多个小部件 例如 我有三个按钮 我想在悬停后更改它们的颜色 from Tkinter import def SetColor event event widget config bg red return de
  • 检索客户端的 PC 名称? (Windows 身份验证)

    我有一个在内部网络上运行的 ASP net 应用程序 实际上它在 Sharepoint 2007 上运行 我只是好奇 我可以以某种方式检索客户端正在使用的 PC 的名称吗 如果有帮助的话 我可以访问 Active Directory 问题是
  • Safari 上的 CSS 翻译问题

    我正在努力将我制作的 Gif 转换为 CSS 动画 在 Chrome Firefox Opera 上一切正常 但在 Safari 上却出现问题 当我最初加载页面时 图像会忽略翻译并位于下方 但是一旦我单击 Safari 选项卡并返回 页面就
  • 将列列表作为向量传递给 data.table 的 CJ

    我有以下代码 main cols lt c num let dt lt data table num 1 5 let letters 1 5 dt new dt lt dt CJ num num let let unique TRUE on
  • 如何防止 XNA 组件在离屏时绘制?

    我正在 XNA 中制作 2d 游戏 使用可绘制游戏组件时 哪一个性能更好 1 当组件不在屏幕上时 将其从组件列表中删除 当组件在屏幕上时 将其添加 2 当其离屏时 不运行其绘制函数 通过使用 awake 布尔字段和 if 语句围绕绘图函数中
  • 测量服务器请求后 JSF 视图的呈现时间

    我想测量 JSF 应用程序的渲染时间 由于我的权力原因 应用程序无法填充日志 因此 我的问题是 有什么方法可以在使用任何浏览器执行包括后端 服务器 调用的特定操作后测量应用程序的渲染时间 到目前为止 在使用 Chrome 开发者工具后 我发
  • 如何从QVariant获取原始python数据

    这几天正在学习python和Qt 所以请考虑这将是一个新手问题 但我被困在这里 import sys from PyQt4 QtCore import data1 string data2 QVariant data1 data3 data
  • DirectUI 的真相是什么? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个 Windows 桌面应用程序 它需要一个很棒的 UI 我现在使用Visual Studio和MFC 后来听说DirectU
  • 如何获取 MySQL 数据库的最后访问(和/或写入)时间?

    如何查明 MySQL 数据库上次读取或写入的时间 您甚至可以对每张桌子进行检查吗 SELECT UPDATE TIME FROM INFORMATION SCHEMA TABLES WHERE TABLE SCHEMA dbname AND
  • 托管和非托管 C++/MFC 可以混合在一个 dll 中吗?

    以前 我们有 MFC VC6 VB6 和 C 应用程序中的软件 需要调用用 C 和 MFC 编写的相同引擎 该引擎需要 C 来提高速度 当时我们决定使用 COM 作为接口 因为所有三个都可以使用它 并且在编组等方面的问题最少 我们的 MFC
  • 在 SQL Server 中存储图像?

    我制作了一个小型演示网站 并在其上将图像存储在 sql 服务器上的图像列中 我有几个问题是 这是一个坏主意吗 当我的网站增长时 它会影响性能吗 另一种方法是将图像存储在光盘上 并且仅将图像的引用存储在数据库中 这想必是很多人都曾遇到过的共同
  • 使用 docker-compose 将 Gitlab CI/CD 转至 Digital Ocean 以实现多个存储库

    目前我在 Gitlab 中有一个项目 repo 它是一个角度应用程序 我使用 Gitlab CI CD 来构建 测试 发布和部署 发布将构建一个新的 docker 镜像 将其推送到 Gitlab 注册表 然后将其部署到我的 Digital
  • 有人对以这种方式使用黑板模式有想法吗?

    有人对 实用程序员 第 165 页中的 Blackboard 概念有什么想法吗 我想要几个彼此独立的小子系统 DLL 和 EXE 有一些程序集将被所有 EXE 使用 这些程序集几乎都使用相同的数据库 Blackboard 类型模式不是使用接