亓憩
众所周知Mc的处理只是单线程的。
是因为我们的服务端都是单线程的吗?
官方的正版服务器是否也是单线程?
欢迎大家讨论


咕噜and呼噜
表示没人看得懂



jiongjionger
主线程(Tick Loop)是单线程的,如实体的运算、方块的破坏、放置、作物的生长、红石事件、插件的各种Event。聊天和网络的通讯部分是异步多线程的,Spigot的区块加载是异步多线程的,Spigot的一些分支还实现了光照运算、流水运算、区块生成的异步多线程。

为何只能单线程,是因为存在同步性,也就是线程安全。例如你放置方块后破坏这个方块,这是有次序之分的,如果放置和破坏方块是异步多线程的,如果存在延迟。很可能在服务器看来破坏方块在前,放置方块在后。那么结果就是方块放置了,你却捡到了这个方块的掉落物,相当于刷了一个方块。

异步多线程也能保证线程安全,但是难度比单线程大不少,而且性能不一定就比单线程要高。目前Spigot这些服务端都是在官方服务端反编译的基础上打Patch来优化性能和增加功能、API。如果官方服务端没有实现全异步多线程,第三方要实现,是非常非常非常困难的,即便实现了,也很可能非常不稳定或者性能还不如单线程。

Minecraftian
jiongjionger 发表于 2015-4-25 21:29
主线程(Tick Loop)是单线程的,如实体的运算、方块的破坏、放置、作物的生长、红石事件、插件的各种Event ...

好专业。

亓憩
jiongjionger 发表于 2015-4-25 21:29
主线程(Tick Loop)是单线程的,如实体的运算、方块的破坏、放置、作物的生长、红石事件、插件的各种Event ...

很赞。

亓憩
jiongjionger 发表于 2015-4-25 21:29
主线程(Tick Loop)是单线程的,如实体的运算、方块的破坏、放置、作物的生长、红石事件、插件的各种Event ...

那么cauldron是基于Spigot的吧?、
他是多线程嘛?

mcjava
不明觉厉,表示服务器方面了解少

西瓜DADA
没看懂什么意思

jiongjionger
亓憩 发表于 2015-4-25 23:03
那么cauldron是基于Spigot的吧?、
他是多线程嘛?

MCPC+相当于是Spigot做了一些优化(不装MOD的话性能差不多)的基础上装了forge。
所以MCPC+的主线程也是单线程的。

第一页 上一页 下一页 最后一页