本帖最后由 cyqsimon 于 2015-9-30 18:40 编辑
Searge: 昨天的修复"只是"一个资源竞争[1]问题,实体在客户端出现前已经在区块中出现,所以它们对用户不可见
Searge: 不可变数据[2]不会有资源竞争问题,但是我觉得它也会令游戏非常沉闷
推文: https://twitter.com/SeargeDP/status/648836545286422528 https://twitter.com/SeargeDP/status/648836858064052224
[1]: Race Condition Wikipedia Link
[2]: Immutable Object Wikipedia Link
朝阳区看你们全看不懂觉得也该解释一下了
java编程里常常需要用到多线程以提高效率,而多线程就会产生非顺序执行的现象,如果是对于同一个变量的操作就会容易产生错误
在这个特定情况里,个人理解是Internal Server的线程和客户端的线程(Minecraft单机时其实是在后台运行一个完整服务端)同时对单个实体(一个java对象)的数据进行了写入操作,造成出错导致无法正确显示
至于为何不可变数据不会有资源竞争问题,理由其实很简单。资源竞争问题的先发条件是多个线程同时对同一数据进行写入操作。然而不可变数据是不可写入的,自然就不会有资源竞争问题。至于为何说它会令游戏非常沉闷,不可变的游戏会好玩吗?
The bugfix yesterday was "just" a race condition. Entities were added to chunks before those existed on the client, so they were not visible
Searge: 昨天的修复"只是"一个资源竞争[1]问题,实体在客户端出现前已经在区块中出现,所以它们对用户不可见
Immutable data can't have race conditions, but I assume it would also make a very boring game.
Searge: 不可变数据[2]不会有资源竞争问题,但是我觉得它也会令游戏非常沉闷
推文: https://twitter.com/SeargeDP/status/648836545286422528 https://twitter.com/SeargeDP/status/648836858064052224
[1]: Race Condition Wikipedia Link
[2]: Immutable Object Wikipedia Link
朝阳区看你们全看不懂觉得也该解释一下了
java编程里常常需要用到多线程以提高效率,而多线程就会产生非顺序执行的现象,如果是对于同一个变量的操作就会容易产生错误
在这个特定情况里,个人理解是Internal Server的线程和客户端的线程(Minecraft单机时其实是在后台运行一个完整服务端)同时对单个实体(一个java对象)的数据进行了写入操作,造成出错导致无法正确显示
至于为何不可变数据不会有资源竞争问题,理由其实很简单。资源竞争问题的先发条件是多个线程同时对同一数据进行写入操作。然而不可变数据是不可写入的,自然就不会有资源竞争问题。至于为何说它会令游戏非常沉闷,不可变的游戏会好玩吗?
并没有看懂
看不懂怎么办