多线程原理
MinecraftServer.start()
MinecraftServer.start()中,Minestom的各个调度器依次启动:
- 启动ServerProcess
- 启动ThreadDispatcher,负责为区块和实体的tick任务分配线程,线程池的线程数量由ServerFlag.DISPATCHER_THREADS决定
- 启动TickSchedulerThread,主要是ServerProcess的ticker执行tick():
- SchedulerManager处理tick,
- Ticker.serverTick()
- tick所有instance,在当前线程(TickSchedulerThread)
- tick所有chunk(以及里面的Entity), 在ThreadDispatcher分配的线程
- 发布ServerTickMonitorEvent
Scheduler
SchedulerManager
中央调度器,管理shutdown task, 在主线程TickSchedulerThread运行
Entity.scheduler()
每个实体持有一个调度器,在调用tick()时运行,因此在调度器中可以安全地操作实体对象,而不必使用Acquirable