pca006132
本帖最后由 cyqsimon 于 2015-9-30 18:40 编辑
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对象)的数据进行了写入操作,造成出错导致无法正确显示

至于为何不可变数据不会有资源竞争问题,理由其实很简单。资源竞争问题的先发条件是多个线程同时对同一数据进行写入操作。然而不可变数据是不可写入的,自然就不会有资源竞争问题。至于为何说它会令游戏非常沉闷,不可变的游戏会好玩吗?

水蘊臻
并没有看懂

毒蛇
看不懂怎么办

chyx

这个时候想想这不是给我看的就好啦

侑阳
chyx 发表于 2015-9-29 21:31
这个时候想想这不是给我看的就好啦

机制.如此明事理

猪一头
反正不是给我看的

IceFreeze
mc的沙盒模式正是因为可以大幅度更变的自由模式才有名的,如果都常量了,自然┑( ̄Д  ̄)┍

andylizi
虽然只能看懂一些。。但是我想说,
资源竞争问题的先发条件是多个线程同时对同一数据进行写入操作

这不是线程安全问题吗。。
同步块何在。。?

bakaawt
要方便肯定不能使用Java,Bug太多~

。—。
andylizi 发表于 2015-9-30 12:35
虽然只能看懂一些。。但是我想说,

这不是线程安全问题吗。。

就比如说只有一个炉子[furnace],
拿着生鱼的Steve.Hoding.RawFish捷足先登把炉子[furnace]占走烤鱼去了,
于是拎着铁矿石的Steve.Hoding.IronOre因没能及时烧完矿做出装备[iron_helmet] [iron_chestplate] [iron_leggings] [iron_boots] 然后被开除了→_→

幸福一一乐
最近minecraft1.9被折磨得不轻啊

cyqsimon
andylizi 发表于 2015-9-30 12:35
虽然只能看懂一些。。但是我想说,

这不是线程安全问题吗。。

synchronized随意使用会大大降低效率,这里是执行效率和bug风险之间的tradeoff

andylizi
cyqsimon 发表于 2015-9-30 18:18
synchronized随意使用会大大降低效率,这里是执行效率和bug风险之间的tradeoff

"随意使用" "执行效率"对嘛
所以这就是问题所在
话说如果MC用其他语言写,也会这样吗?(我对其他语言不熟)

bobby825
cyqsimon 发表于 2015-9-30 18:18
synchronized随意使用会大大降低效率,这里是执行效率和bug风险之间的tradeoff

嗯,同步会导致CPU利用率下降,还是要合理使用其它方法

cyqsimon
andylizi 发表于 2015-9-30 18:24
"随意使用" "执行效率"对嘛
所以这就是问题所在
话说如果MC用其他语言写,也会这样吗?(我对其他语言不 ...

支持多线程的语言都有,因为synchronized的实现方式再怎么不同,作用还是一样的:同一个方法在任意时刻只能被单一线程调用,所以对执行效率的影响和实现语言几乎是无关的

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