Expand description
EventEngine:无界队列 + 单分发线程 + 定时线程。
线程模型(对齐 enkeep_trade 的实际用法:各组件跨线程共享同一引擎):
EventEngine满足Send + Sync:可经Arc<EventEngine>供任意多线程共享,put / register / unregister / register_general / unregister_general / is_active / pending_events / start / stop全部可从任意线程调用- 分发端保持单线程串行(对齐原版):同一 type 的事件按 put 顺序送达, 同 type 的 handler 按注册顺序执行,general handler 随后
- handler 内部若需并行,由 handler 自行分流(引擎不替业务并行)—— 与原版一致
生命周期与原版对齐:
start()幂等;分发线程recv_timeout(1s)轮询active, 对齐原版_run的get(block=True, timeout=1)put()在 start 之前投递合法(事件入队,随 start 分发,对齐原版Queue.put)stop()置 inactive 后 join 两线程;队列残余事件被丢弃(对齐原版), 并把pending计数清零;stop 后引擎不可重启(receiver 已被消费,与原版线程死透一致)- 使用方如需“等排空“:所有 put 完成后轮询
EventEngine::pending_events归零再 stop
handler panic 被 catch_unwind 隔离(修正项,见 DESIGN.md §2)。
队列实现:crossbeam-channel unbounded()
- 对应原版 Python
queue.Queue()无界语义 - MPMC 无锁快路径(单字 CAS),百万级事件/秒热路径开销低
- Sender/Receiver 均可克隆 → 后续把 tick 等热点事件分流到独立 worker 时无需换型
send在无任何 Receiver 时报SendError→ 映射PutError::Stopped
Structs§
- Event
Engine - 事件引擎。Send + Sync:可被
Arc共享于多线程。
Enums§
- PutError
- put 失败原因(已 stop 或分发线程已退出)。 注意:start 之前 put 是合法的(事件入队,随 start 分发,对齐原版)。