简体中文
动作管道性能说明
Emaki 动作管道的性能评估口径如下: 可静态证实的架构优势, 可复现的基准方法与量化结果表.本环境无 Paper/Folia 实机, 量化项一律标注"未执行"并给出关闭条件 -- 架构优势以源码为证, 具体数值必须在实机测得后方可对外引用
架构优势 (源码可证实)
1. 编译期固化, 运行期零解析
管道在配置加载期经 PipelineParser + StaticValidator 一次性编译为 CompiledPipeline (AST + 类型化参数校验通过). 运行期 ActionInterpreter 直接执行已编译结构:
- 不做字符串重新分词, 不做参数类型校验, 不做未知段查找;
- 参数渲染只对含占位符的值执行
render, 纯字面量跳过; - 编译失败在加载期报出全部诊断 (48+ 项规则), 运行期不存在段名写错直至执行才暴露的路径
2. gate 短路与分组调度
- gate 短路: 源段
Empty, gateHalted直接进入终态 (stopped), 后续段整段跳过, 不做任何跨域调度; - 同域合批:
StageGroup把连续的同域段合为一次调度 (foldable段可附加到前组), 减少 Folia/Paper 线程切换次数 -- 例如"改背包 + 改经验值"两个CONTEXT_ENTITY段只发生一次 owner 线程转移; - 五域分级:
SERVER_GLOBAL/CONTEXT_ENTITY/LOCATION_REGION/ASYNC_COMPUTE/UNDECLARED在注册期强制声明 (StageRegistry.checkDomain), 运行期StageDispatcher按域分发.竞品普遍没有线程域分级, 这是 Emaki 在 Folia 上的结构性差异
3. 热路径零分配观测
StepReporter 默认实现为 NOOP (接口空方法), 非调试运行时所有观测点为空调用; ActionAuditLogger 无 DebugLogger 时直接返回. 观测基础设施不向生产热路径引入任何分配或分支成本
4. 淘汰优先于执行
每级 gate 的输入/输出计数在 StepReporter.gate 上报 (干跑/调试模式渲染漏斗); 语义上先淘汰后执行 -- filter/where 在动作执行前淘汰不合格目标, 避免对无效目标发起跨域调度
基准方法 (可复现)
遵循 .spigot-dev/guides/performance-baseline.md 的采样纪律: 只有同一场景, 同一时长, 同一规模的数据才可对比. 三个必测场景:
| 场景 | 测什么 | 怎么触发 | 预算目标 |
|---|---|---|---|
| 管道吞吐 | 每秒完成的管道执行数 | execute 模式连续跑固定短管道 (如 self | damage amount=1), spark 采样 120s | 待实机基线后填写 |
| P95 延迟 | 单条管道的端到端延迟分布 | 同上, /spark profiler 方法级采样 ActionInterpreter.walk | 待实机基线后填写 |
| gate 短路收益 | Halted/Empty 路径 vs 全通过路径的耗时差 | 对比 filter 'health_percent<=0' (必然全淘汰) 与 filter 'health_percent<=100' (必然全通过) | 短路路径应显著低于全通过路径 |
观测命令:
/spark profiler start --timeout 120
# 跑固定场景...
/spark profiler stop --save-to-file分组调度收益的观测: 在 spark 方法级采样中对比 StageDispatcher.dispatch 的调用次数与被调度段数之比 -- 合批生效时该比值应明显小于 1
量化结果
| 指标 | 数值 | 采集日期 | 状态 |
|---|---|---|---|
| 管道吞吐 (条/秒) | — | — | 未执行 |
| P95 端到端延迟 | — | — | 未执行 |
| gate 短路收益 (短路 vs 全通过) | — | — | 未执行 |
| 合批后 dispatch 次数/段数比 | — | — | 未执行 |
关闭条件: Paper 26.1 实机按上表三场景各跑一轮 spark 采样, 把数值填回本表并标注采集日期; 在此之前任何量化格都不得填入推测值
与竞品的对比标准
- 可静态引用 (源码级事实): 五域线程分组与 Folia 域强制声明 (MythicMobs/Skript 无此机制); 编译期 48+ 项诊断 (MythicMobs 靠运行期报错 + Wiki 猜测)
- 不可引用 (需实机): 任何吞吐, 延迟, TPS 数字. 竞品侧数字同样是营销数据, 对外引用前须复检来源日期