我是F#的新手,所以也许这个解决方案对某人来说可能很清楚,但是我找不到它。
想象一下世界大块的游戏世界(类似于Minecraft),但是对于更多玩家来说。理论上,像C++,java或C#这样的语言可以同时修改多个世界块。两个或两个以上的玩家尝试在不同的块中放置或移除块,并且只要每个块中只有一个动作发生,所有这些动作都可以改变世界的状态而不会相互影响。序列化只会在一个块中的多个玩家执行修改时发生。F#同时在多个线程中更新列表
我的F#的理解是我需要序列化对全球一级,这些行动并没有两个动作可以在整个世界同一时间发生,因为更新功能需要actual world state
update params(like add/remove blok)
并返回new world state
。
对于该示例,world state
包含chunk list
。
有没有一种方法可以并行进行世界更新?
world state
可以以不同的方式存储以允许同时更新到多个块?
在大多数与游戏相关的代码中,我会使用'array'而不是'list',除非你特别需要'list'语义(不可变的添加和从前面删除项目)。如果您在固定大小上进行大量映射,数组通常会更快。 – TheQuickBrownFox
'array'或'list'对于我试图描述的问题并不重要。如果我正确理解F#,我不能修改'array'或'list'元素,我需要用改变的元素创建一个新的'array'或'list',这不会发生在多个线程上,因为只有一个新的'array '或'列表'将适用。 – Jakub
实际上,数组是可变的,所以你可以修改元素,但我并不是建议你这样做。我只是说,既然你在谈论一款游戏,那么阵列对性能来说是一个很好的默认。 – TheQuickBrownFox