schedulercore-mc1.21.1-1.1.0.jar
Curse Maven Snippet
What's new
Minecraft 1.21.1 — v1.1.0
Needs: Minecraft 1.21.1 · NeoForge 21.1.169+ · AE2 19.2.16 or newer
这个版本做了两件事:修掉两个会饿死订单的缺陷,以及把项目变成两条线。
⚠️ 请先看这条:本版本要求 AE2 19.2.16 或更新(此前是 19.2.0)。本 mod 会挂钩 AE2 的"作业挂起" 能力,而那是 19.2.16 才加入的;在 19.2.0–19.2.15 上它会拒绝加载。如果你用的是 ATM9 之类的整合包且 AE2 版本偏低,请先升级 AE2。
修掉的两个缺陷。 两个都不会崩溃、也不会丢东西,这正是它们能存活至今的原因——被饿死的订单看起来 就像机器慢,而合成状态界面当时无法区分这两者:
- "注册了机器"曾被当成"这条路死了"的证据。 订单推不出样板时,调度器会去问原因;只要样板供应器
报告"空闲",它就认定是这个订单自己的输入有问题,于是立刻结束该订单的时间片。这个判断是错的:
报告空闲的是样板供应器,而它对供应器背后的机器一无所知——分子装配室的内部队列满时,它前面的
供应器恰恰是空闲的。每一次这样的判断都被归为 FUTILE,时间片立刻让出,另一个订单每两 tick 一次的推送
就把那台机器永远顶满。实测:一个订单连续 346 次 FUTILE,另一个订单一路推进,而被饿死订单的
waitingFor台账始终是 0——它一次样板都没推出去过。现在"注册了机器"是继续等待的理由,只有 "完全没有机器"才算死路。 - 一次查询曾为"本 mod 不管理的 CPU"注册调度状态。
schedulercore$state()会在首次调用时创建并注册 状态,而合成状态界面的查询路径会调用它。于是仅仅打开界面看一眼,就会把一个没有调度核心的 CPU 拉进调度器,让它此后一直为一个从未申请的状态买单。查询路径现已无副作用。
现在有两条 Minecraft 线。 调度逻辑与面向 AE2 的混入统一放进一份 common/ 源码,两个目标用各自的
映射编译,各自只保留真正属于自己那一代的东西。请下载与你 Minecraft 版本对应的那个文件。
发布版 jar 里不再包含 /schedulercore 指令。 验收与测量指令是开发期工具,已移出发布构建(这也让
1.21.1 的 jar 从 151,449 降到 95,043 字节)。如果你需要它们,请自行加 -PwithProbes 构建。
This mod has no additional files
