首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost Statechart诉Meta State Machine

Boost Statechart诉Meta State Machine
EN

Stack Overflow用户
提问于 2010-11-25 09:43:46
回答 5查看 35.5K关注 0票数 153

很明显,boost包含两个独立的状态机库:状态图元状态机 (MSM)。这些标语给出了非常相似的描述:

  • Boost.Statechart -任意复杂的有限状态机可以在易读和可维护的C++代码中实现.
  • 元状态机-用于表达UML2有限状态机的非常高性能的库.

你知道关键的区别是什么吗?在选择两者之间有哪些考虑因素?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-26 08:18:52

由于大家似乎很感兴趣,请允许我提出我的(明显有偏见的)意见,因此,这一意见应略加考虑:

  • MSM要快得多
  • MSM不需要RTTI或任何虚拟的
  • MSM有一个更完整的UML2支持(例如内部转换,UML-符合正交区域)
  • MSM提供了一种描述性语言(实际上有几种)。例如,使用eUML前端,可以将转换描述为源+事件保护/动作==目标。
  • MSM会使您的编译器受到更大的状态机的影响,所以您需要一个最近的编译器(g++ >= 4.x,VC >= 9)。

你可以通过寻找在MSM评审期间发布的评论来让自己有一个更好的意见。开发人员名单上对这一主题进行了大量讨论。

票数 124
EN

Stack Overflow用户

发布于 2010-11-30 07:41:41

正如Christophe已经提到的,这两个库之间的关键区别之一是运行时性能。虽然MSM可能提供了您所能得到的最好的服务,但Statechart有意识地将内存和处理器周期转换为更好的可伸缩性。

使用Boost.Statechart,您可以将状态机的布局(即状态、转换)扩展到多个转换单元(cpp文件)上,这是MSM无法实现的。这允许您使大型MSM的实现比MSM更易于维护和获得更快的编译速度。

对于您的应用程序来说,Statechart的性能开销与MSM相比是否具有实际意义,当您问自己您的应用程序每秒要处理多少事件时,通常很容易回答。

假设一个使用Boost.Statechart实现的中等复杂的FSM,下面是几个大概的数字:

  • 大多数当前的PC硬件都能很容易地处理每秒100‘000次事件。
  • 即使是资源受限的硬件,每秒也可以处理几百个事件。

关于CPU负载,如果要处理的事件数量远低于这些数量,则Boost.Statechart开销与MSM相比几乎肯定不会明显。如果数字要高得多,你肯定会更好地使用MSM。

有关性能/可伸缩性权衡的更多深入信息可以在这里找到:0/libs/statechart/doc/playce.html

票数 121
EN

Stack Overflow用户

发布于 2010-11-25 13:11:45

在编写我自己的PPP实现时,我使用Statechart有三个原因: 1) Statechart更简单,文档更清晰;2)我非常不喜欢UML :)

Boost docs说MSM的速度至少快20倍,但对于大型FSM来说,编译速度相当慢。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4275602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档