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