Skip to main content

Module engine

Module engine 

Source
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§

EventEngine
事件引擎。Send + Sync:可被 Arc 共享于多线程。

Enums§

PutError
put 失败原因(已 stop 或分发线程已退出)。 注意:start 之前 put 是合法的(事件入队,随 start 分发,对齐原版)。