跳到主要内容

多线程原理

MinecraftServer.start()

MinecraftServer.start()中,Minestom的各个调度器依次启动:

  1. 启动ServerProcess
  2. 启动ThreadDispatcher,负责为区块和实体的tick任务分配线程,线程池的线程数量由ServerFlag.DISPATCHER_THREADS决定
  3. 启动TickSchedulerThread,主要是ServerProcess的ticker执行tick():
    1. SchedulerManager处理tick,
    2. Ticker.serverTick()
      1. tick所有instance,在当前线程(TickSchedulerThread)
      2. tick所有chunk(以及里面的Entity), 在ThreadDispatcher分配的线程
    3. 发布ServerTickMonitorEvent

Scheduler

SchedulerManager

中央调度器,管理shutdown task, 在主线程TickSchedulerThread运行

Entity.scheduler()

每个实体持有一个调度器,在调用tick()时运行,因此在调度器中可以安全地操作实体对象,而不必使用Acquirable