World Worker Manager

基本信息

属性 值
类 com.chaosthedude.naturescompass.util.WorldWorkerManager
调度方 ServerTickHandler.onServerTick()
触发时机 FMLCommonHandler.instance().bus().register(new ServerTickHandler()) 在 CommonProxy.registerEvents() 注册

行为

轻量级时间片任务调度器,每服务器 tick 把剩余时间预算(50 ms - 上半 tick 已耗时间,最低保留 10 ms)分配给所有 IWorker。worker 通过 addWorker() 提交,每 tick 反复调用 doWork() 直到时间用尽或 worker 自报 hasWork()=false。 本 mod 用它驱动 BiomeSearchWorker 在不卡主线程的前提下做螺旋采样。

时间片分配(tick(boolean start)):

  • start == true 时仅记录 startTime,返回。
  • start == false 时:
    • 计算 time = max(10, 50 - (now - startTime))。
    • 在该时间窗口内反复拉取下一个 worker 执行 doWork(),若 doWork() 返回 false 或 !hasWork() 则丢弃并拉取下一个。

数值

数值 默认值
时间片上限 50 ms / tick
最小分配时间 10 ms

限制

  • 不在 GTNH 主线以外的复杂调度中复用,仅作为 compass 专用执行池。
  • workers 列表是共享 ArrayList,并发 addWorker/remove 用 synchronized 同步。
  • worker 自身必须保证 doWork() 不抛异常,否则后续 worker 不会被执行(try/catch 未包裹)。
  • clear() 仅在服务器关停时内部调用,未在 GUI 关闭时清理——意味着取消搜索的 worker 仍会跑到半径耗尽。

第三方 mod 集成

无;类注释注明代码基于 Minecraft Forge - Forge Development LLC 的 WorldWorkerManager,LGPL-2.1-only。

相关条目