尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Folia 区域化多线程:从源码到可运行 JAR 的最短路径

Folia 区域化多线程:从源码到可运行 JAR 的最短路径 Folia 区域化多线程从源码到可运行 JAR 的最短路径【免费下载链接】FoliaFork of Paper which adds regionised multithreading to the dedicated server.项目地址: https://gitcode.com/gh_mirrors/fo/Folia单线程专用服务器在线人数一上来TPS 就开始跳水瓶颈在于整个世界共用一个主线程。Folia 是 Paper 的一个 fork为专用服务器引入区域化多线程把世界划分成区域每个区域在独立线程上跑自己的 tick 循环负载分散到多核而不是堆在一个核心上。项目速览Folia 如何把世界拆成并行区域 Folia 把邻近的已加载区块归组成独立区域每个区域有自己的 tick 循环按 Minecraft 标准 20 TPS 运行这些循环在一个可配置大小的线程池上并行执行。主线程这个概念不复存在了。玩家分布天然分散的玩法SMP、空岛类服务器获益最大硬件方面官方建议至少 16 个物理核心。上手路径从源码构建可运行的 Folia JAR克隆仓库构建链由 paperweight 体系提供git clone https://gitcode.com/gh_mirrors/fo/Folia进入目录后依次执行两个 Gradle 任务。applyPatches会把 minecraft-patches 与 paper-patches 下的全部补丁打到对应源码上createReobfPaperclipJar生成混淆后的可运行 JAR产物落在build/libs/。./gradlew applyPatches ./gradlew createReobfPaperclipJar需要改补丁内容时直接编辑补丁文件再重跑applyPatches即可仓库根目录还提供rb.sh、patch.sh等脚本分别对应重建仓库和应用补丁的快捷入口。配置要点构建参数与补丁存放位置gradle.properties构建参数所在mcVersion、paperRef、apiVersion都在这里切换目标版本先改它folia-server/minecraft-patches/对原版 Minecraft 的补丁区域化多线程核心逻辑在0001-Region-Threading-Base.patchfolia-api/paper-patches/features/API 层特性补丁区域调度器、Folia 插件标记、分区域 TPS 均出自此处进阶能力区域调度器如何工作RegionScheduler 与 EntityScheduler 取代了依赖主线程的 BukkitScheduler前者把任务调度到拥有某坐标的区域后者调度到拥有某实体的区域任务最终都跑在对应区域的 tick 线程上。控制台命令在全局区域执行涉及单个实体的事件如破坏方块在拥有该实体的区域触发而对实体施加动作的事件则在拥有目标实体的区域触发。线程上下文检查是另一道保险。Bukkit#isOwnedByCurrentRegion可判断当前 tick 的区域是否拥有某个坐标或实体服务端内置的线程检查只会越来越严格跨区域访问数据会在源头直接抛错而不是静默地产生数据损坏。性能监控区域 profiler 与 watchdog区域 profiler 能输出每个区域的 tick 时间分布配合分区域版 TPS 输出可以定位到底是哪个区域拖慢了整体。watchdog 线程负责监控 tick 挂起服务器卡死时日志会指出问题出在哪个线程上下文排查时不必再靠猜。避坑与实测建议线程分配与插件兼容性 ⚠️插件兼容预期建议放在零。Folia 只加载在plugin.yml中显式声明folia-supported: true的插件多数 Paper 插件会受牵连部分 API 已不可用比如Entity#teleport应改用teleportAsync记分板 API 整体视为损坏。线程分配可参考 README 给出的粗略比例每 200~300 名玩家配约 4 个 netty IO 线程、约 3 个区块 IO 线程、约 2 个区块生成 worker剩余 tick 线程通过全局配置的threaded-regions.threads指定总线程数控制在核心数的 80% 以内给 GC 并发线程和插件线程留出余量。开服前建议预生成世界——不做预生成时即便给足十几个区块生成线程高在线下仍然吃力。区域之间只能并行 tick、不共享数据插件持有的状态要用线程安全结构但并发集合用错往往只是掩盖问题而非解决。确认插件清单、完成世界预生成后先在测试环境跑起来观察分区域 TPS 与各线程的 CPU 占用确认稳定后再正式开服。【免费下载链接】FoliaFork of Paper which adds regionised multithreading to the dedicated server.项目地址: https://gitcode.com/gh_mirrors/fo/Folia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表