[c++] 提升状态图与元状态机


Answers

正如Christophe已经提到的那样,两个库之间的主要区别之一是运行时性能。 尽管MSM可能提供了您可以在此获得的最佳性能,但状态图有意识地将内存和处理器周期换成更好的可扩展性。

使用Boost.Statechart,您可以以不能使用MSM的方式将状态机的布局 (即状态,转换)分布到多个转换单元(cpp文件)。 这使您可以使大型FSM的实现更易于维护,并且比MSM更快地编译。

当你问自己你的应用程序每秒必须处理多少事件时,Statechart与MSM相比的性能开销对于你的应用程序是否真的非常重要,通常很容易回答。

假设使用Boost.Statechart实现了适度复杂的FSM,以下是一些球场数字:

  • 大多数当前的PC硬件将很容易处理每秒> 100000个事件
  • 即使资源非常有限的硬件也能够每秒处理几百个事件。

关于CPU负载,如果要处理的事件数量远低于这些数字,则与MSM相比,Boost.Statechart开销几乎肯定不会引人注意。 如果这个数字要高得多,那么用MSM肯定会更好。

有关性能/可伸缩性权衡的更深入的信息可以在这里找到: http://www.boost.org/doc/libs/1_45_0/libs/statechart/doc/performance.html : http://www.boost.org/doc/libs/1_45_0/libs/statechart/doc/performance.html

Question

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

  • Boost.Statechart - 任意复杂的有限状态机都可以用易读和可维护的C ++代码实现。
  • Meta State Machine - 用于表现型UML2有限状态机的高性能库。

你知道两者之间有什么关键的区别和选择的考虑吗?




前段时间我开始使用Statechart,并转而使用MSM,因为它更容易与单个线程的asio结合使用。 我没有设法使用asio来对状态图及其多线程功能进行网格划分 - 这可能是我对Statechart的一种新手不理解。 我发现MSM更容易使用,因为它没有解决多线程问题。




Related