0

首先,我想确定金融界实时系统可接受的端到端延迟小于 200 毫秒。好的,这就是我所追求的。在实时系统的设计中,有一些“设计模式”(或技术)可以提高性能(即减少处理时间、提高可伸缩性等)。

我所追求的一个例子是,使用 GUID 而不是序号来分配主键。GUID 的基本原理是处理程序拥有自己的主键生成器,而无需相互“协商”。这允许发生并行处理并允许缩放。

这里还有一些。我会尽量添加到列表中。

我向社区的集体智慧低头。多谢!

4

4 回答 4

2

对于一般的实时系统工作,经典规则是追求可变性并杀死它。真正的硬实时意味着使用静态计划、简化的操作系统、高效的设备驱动程序和坚如磐石的优先级。如果您真的希望计算 X 在已知的时限 T 内结束,那么动态或自适应的东西是不可行的。

我猜你的意思在这方面并不是真正的实时,而且我猜这个系统比读取传感器、计算控制回路、激活执行器要复杂一些。更多细节会很高兴知道这里有哪些限制。

于 2008-09-28T18:34:52.403 回答
1

您已经提到了事件驱动架构,我建议您看看分阶段事件驱动架构 (SEDA)。

阶段本质上是事件队列和对事件进行操作的函数。这种架构的“非常规”之处在于每个阶段都可以在自己的线程中运行,并且功能通常需要异步 I/O 等。以这种方式排列程序一开始很尴尬,但允许各种魔法 - 比如QoS,调整调度等。

参见威尔士的伯克利论文和他的网站。您还可以查看 Minor Gordon 的项目(来自英国剑桥),称为yield。他取得了一些非常好的结果。看起来该项目一开始是面向 Python 的,但它也可以用于纯 c++。

于 2008-09-28T18:53:06.120 回答
1

尽管听起来很基本,但大多数业务线应用程序都充满了冗余计算,消除它们。计算重构是优化模式的支柱。每次出现处理周期时,您都必须询问:

此周期内的计算结果与周期外的输出相同。作为一个基本示例:

for(int i=0;i< x/2; i++)
  //do something

在这里,您可以安全地取 x/2 并在 cicle 之前计算它并重用该值(现代编译器现在负责这些琐碎的优化)

为了了解这个简单规则的影响,我可以给你一个应用于数据库查询的例子。为了避免两个表的 INNER JOIN 以获得高度重复的字段 requent,您可以违反规范化规则并将其复制到与具有该值的表相关的表上。这避免了重复的表连接处理,并且可以释放并行化,因为只有一个表需要锁定在事务上。例子:

客户表查询经常需要客户折扣,但折扣保存在客户类型表中。

于 2008-09-28T19:08:39.983 回答
0

除非您确定它已“损坏”,否则不要“修复”任何东西。

我要做的第一件事是从必须快速运行的程序中调出火焰。我会使用我最喜欢的技术。然后,很有可能,会有足够的回旋余地来玩弄建筑。

于 2008-11-05T01:11:12.327 回答