雨之核心RainCore
Minecraft 服务器核心,开发中阅读介绍

200 人挤在主城
依然 19.9 TPS

雨之核心 RainCore 把世界切成棋盘格,分到多个 CPU 核心同时运算。现有插件不用改,单服撑住 100 到 200 人。

基于 Leaf插件不用改1.21.11 到 26.3

26.3 实测同一台机器、同一组设置
RainCore
19.912 ms
Leaf
19.928 ms
Folia
19.052 ms
RainCore 每 tick 平均耗时
12 ms
比 Leaf 少 57%

相距 32 格。三个核心都撑得住,差在每个 tick 要花多少时间。Folia 的毫秒是单一区域的值。

19.9200 人,相距 256 格同场景 Leaf 13.0,Folia 7.2
19.7300 人,相距 256 格同场景 Folia 3.9
19.537 个插件同时载入,200 人同一套插件,棋盘格关闭时 14.4
运作方式

把世界切成棋盘格,四种颜色轮流运算

Folia 的区域在玩家靠近时会合并,最後只剩一条线程负责主城。棋盘格不看玩家远近,人再多也拆得开。

  1. 1世界切成 64 格见方的格子,涂成四种颜色。
  2. 2同色的格子至少相隔 64 格,彼此碰不到,可以同时运算。
  3. 3四种颜色依序跑完就是一个 tick,插件仍然在主线程上。
看互动示意图
1234
7 条工作线程分担同一种颜色
为什么选雨之核心

多核心的性能,单线程的兼容性

大型服务器通常要在性能和插件之间二选一。雨之核心把世界运算拆开,插件仍然留在主线程。

每个 tick 花多久

200 人挤在主城,每 tick 平均耗时

RainCore12 ms
Leaf28 ms
Folia52 ms
红线是 50 ms 上限,超过就会掉 TPS。Folia 是单一区域的值。
兼容性

插件不用改

插件永远在主线程上跑。工作线程碰到插件或共用数据时会全部暂停,等主线程做完再继续。

版本

1.21.11 到 26.3

每个 Minecraft 版本一个 jar,同版本的世界直接沿用。

1.21.1126.1.226.226.3
自动调整

每 256 次比一次,选快的方式

每个阶段定期试跑并行与单线程两种方式。插件监听大量事件时并行反而要一直暂停,这时核心会自动退回单线程,不会比原本慢。

看它怎么撑住 200 人

实测数据列出每个场景的 TPS 和每 tick 耗时,运作方式用互动示意图说明棋盘格怎么把世界拆开。