知识卡片

statechart的三种事件响应方式

专业/工作 · 515.a

内容

每个状态用一个事件类型列表声明自己能响应哪些事件,对应三种处理方式:transition<事件,目标状态> 是无条件跳转,收到该事件直接切到目标状态、不需要写任何逻辑;custom_reaction<事件> 交给用户自定义的 react 函数决定,函数内部还能调用 transit 主动跳转、post_event 产生并投递一个新事件、forward_event 把当前事件原样转发给状态机(通常是转给更外层的祖先状态处理)、或 discard_event 直接丢弃不处理;没有显式声明处理方式的事件,落到兜底分支(如捕获所有 event_base 的处理器)时通常也是丢弃。把”要不要根据条件判断”这件事作为设计状态转换表时的第一道分类,简单的无条件跳转不需要写一行业务代码,只有真正依赖运行时条件的转换才需要自定义函数介入。

参考来源

《Ceph源码分析》第10章《Ceph Peering机制》