很明显,boost包含两个独立的状态机库:状态图和元状态机 (MSM)。这些标语给出了非常相似的描述:
你知道关键的区别是什么吗?在选择两者之间有哪些考虑因素?
发布于 2010-11-26 08:18:52
由于大家似乎很感兴趣,请允许我提出我的(明显有偏见的)意见,因此,这一意见应略加考虑:
你可以通过寻找在MSM评审期间发布的评论来让自己有一个更好的意见。开发人员名单上对这一主题进行了大量讨论。
发布于 2010-11-30 07:41:41
正如Christophe已经提到的,这两个库之间的关键区别之一是运行时性能。虽然MSM可能提供了您所能得到的最好的服务,但Statechart有意识地将内存和处理器周期转换为更好的可伸缩性。
使用Boost.Statechart,您可以将状态机的布局(即状态、转换)扩展到多个转换单元(cpp文件)上,这是MSM无法实现的。这允许您使大型MSM的实现比MSM更易于维护和获得更快的编译速度。
对于您的应用程序来说,Statechart的性能开销与MSM相比是否具有实际意义,当您问自己您的应用程序每秒要处理多少事件时,通常很容易回答。
假设一个使用Boost.Statechart实现的中等复杂的FSM,下面是几个大概的数字:
关于CPU负载,如果要处理的事件数量远低于这些数量,则Boost.Statechart开销与MSM相比几乎肯定不会明显。如果数字要高得多,你肯定会更好地使用MSM。
有关性能/可伸缩性权衡的更多深入信息可以在这里找到:0/libs/statechart/doc/playce.html。
发布于 2010-11-25 13:11:45
在编写我自己的PPP实现时,我使用Statechart有三个原因: 1) Statechart更简单,文档更清晰;2)我非常不喜欢UML :)
Boost docs说MSM的速度至少快20倍,但对于大型FSM来说,编译速度相当慢。
https://stackoverflow.com/questions/4275602
复制相似问题