我是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