【发布时间】:2016-06-22 05:31:10
【问题描述】:
总的来说,我对 Clojure 和 LISP 还很陌生,所以如果这个问题听起来有点傻,请提前原谅。我最近以 MVC 方式用 Java 创建了一个基于回合的视频游戏,其中一个线程负责图形循环(因此,以固定速率更新屏幕上图形实体的几何状态),另一个线程负责处理游戏的逻辑状态;它的行为非常像一个守护进程:除非被要求做某事(详细的用户输入),否则它在后台“休眠”,然后将“更改日志”传递给图形线程,以便它可以呈现对逻辑状态所做的更改。所以游戏世界根本没有“共享”:只有逻辑线程可以访问它,而图形线程的唯一职责是在初始化阶段之后以及当新的更改日志从逻辑线程到达时将更改应用于渲染.
我读到 Clojure 有 vars、refs 和 atom。在这种情况下,我应该使用这些身份中的哪一个来将我的游戏世界状态存储在 Clojure 的逻辑线程中?
【问题讨论】:
-
看看这篇文章,在 clojure 多线程生产者消费者流stackoverflow.com/questions/8925371/clojure-producer-consumer 中维护了一个状态
标签: multithreading model-view-controller clojure identity