评论者:ericnormand
我进行了测试以支持上述我提出的关于时间的声明。如果您运行文件 timingtest.clj,它将使用带有 reset! 和 swap! 的代码不断运行,并带有睡眠 10ms 的验证器。在这两种情况下,它都会打印出唯一数的数量(在这种情况下应等于 reset! 的数量,即 1000)和时间(使用 clojure.core/time)。时间数相对于机器,因此不应视为绝对值。相反,重要的是它们之间的比率。
运行方法:java -cp clojure-1.7.0-master-SNAPSHOT.jar clojure.main timingtest.clj
结果
现有实现
"执行时间:1265.228 毫秒" 使用 reset! 的唯一数:140 "执行时间:11609.686 毫秒" 使用 swap! 的唯一数:1000 "执行时间:7010.132 毫秒" 使用 swap! 和 reset! 的唯一数:628
请注意,它们的行为不同:swap! 序列化监视器,reset! 不会(唯一数的 1)。
建议的实现
"执行时间:1268.778 毫秒" 使用 reset! 的唯一数:1000 "执行时间:11716.678 毫秒" 使用 swap! 的唯一数:1000 "执行时间:7015.994 毫秒" 使用 swap! 和 reset! 的唯一数:1000
进行相同的测试。这次,它们都序列化监视器。此外,时间几乎没有变化。