提高实时系统的性能

时间:2008-09-28 17:38:09

标签: performance real-time

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

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

还有一些。我会尽力在列表中添加。

我向社区的集体智慧屈服。谢谢你!

4 个答案:

答案 0 :(得分:2)

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

我猜你的意思在这方面并不是真正的实时,我猜这个系统比阅读传感器,计算控制回路,激活执行器要复杂一些。更多细节可以很好地了解这里的约束条件。

答案 1 :(得分:1)

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

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

参见威尔士的伯克利论文及其web site。您还可以查看Minor Gordon的项目(来自英国剑桥),名为yield。他有一些非常好的结果。看起来这个项目最初可能是针对Python的,但它也可以用于纯c ++。

答案 2 :(得分:1)

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

在此循环中的内容是使用与循环不同的输出计算的。 作为一个基本的例子:

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

在这里你可以安全地使用x / 2并在cicle之前计算它并重用该值(现代编译器现在负责这些简单的优化)

要查看此简单规则的后果,我可以为您提供应用于数据库查询的示例。为了避免两个表的INNER JOIN以获得高度重复的字段重新出现,您可以违反规范化规则并将其复制到与具有该值的表相关的表上。这避免了重复的表连接处理,并且可以释放并行化,因为只需要在事务中锁定其中一个表。例如:

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

答案 3 :(得分:0)

除非你确定它已“破碎”,否则不要“修复”任何东西。

我要做的第一件事就是调整那个必须快速运行的程序。我会使用我的favorite technique。然后,很可能会有足够的摆动空间来愚弄建筑。

相关问题