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。
相关条目
- BiomeSearchWorker - 唯一调度对象
- ServerTickHandler - 每 tick 驱动
- Proxies - 注册入口