雨之核心RainCore
原理

运作方式

棋盘格怎么把世界分到多个核心。

棋盘格

世界切成 64 格见方的格子,涂成四种颜色。同色的格子至少相隔 64 格,彼此碰不到,所以可以同时运算;四种颜色依序跑完,就是一个 tick。

Folia 的区域在玩家靠近时会合并,合并後只有一条线程负责。棋盘格不看玩家远近,所以主城人再多也拆得开。拖动下面的滑杆可以比较两种方式。

这是示意图,用来说明分组方式,格子大小与合并距离都有简化。

插件为什么不用改

插件永远在主线程上跑。工作线程碰到共用数据或要呼叫插件时会全部暂停,由主线程做完再继续,所以插件看到的仍然是单线程。

村民、Boss、骑乘中的生物,以及插件自己定义的实体,会自动留在主线程,不交给工作线程。完整清单在插件兼容。

自动选择比较快的方式

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