| /** |
| * This package contains the core of Glowstone's threading model. |
| * |
| * Glowstone has 3 groups of threads: |
| * <ol> |
| * <li>World threads. One thread per world</li> |
| * <li>Event/scheduler thread. This thread contains all interaction with Bukkit API and synchronizes all other threads.</li> |
| * <li>Async task thread pool: Pool of threads used to execute async tasks</li> |
| * <li>Netty thread pool. This thread pool is used by Netty for network read/write</li> |
| * </ol> |
| * |
| * Whenever a thread wishes to call an event or perform other interactions with Bukkit API, |
| * it calls the {@link net.glowstone.scheduler.GlowScheduler#syncIfNeeded(java.util.concurrent.Callable)} |
| * |
| * The scheduler thread.synchronizes the world threads, so that each world thread begins a tick at the beginning of a scheduler pulse |
| * |
| * Operation order: |
| * --- Scheduler tick begins --- |
| * --- Pulse sessions --- |
| * --- run sync tasks, queue async tasks -- |
| * --- World tick for each world --- |
| * --- Run in-tick tasks |
| * --- await all worlds complete (in async task) --- |
| */ |
| package net.glowstone.scheduler; |