如果我想保留一个全局计数器(例如计算跨多个线程的传入请求数),那么在java中最好的方法是使用volatile int。假设,正在使用clojure是否有更好的(更好的吞吐量)方法?clojure中的同步计数器
9
A
回答
13
我会做这个用Clojure中的atom:
(def counter (atom 0N))
;; increment the counter
(swap! counter inc)
;; read the counter
@counter
=> 1
这完全是线程安全的,令人惊奇的高性能。此外,由于它使用Clojure的abitrary精度的数字处理,这是不容易的方式,挥发性INT可以整数溢出.....
7
相关问题
- 1. 同步计数器
- 2. Clojure中的Threadlocal计数器
- 3. 计步器(步数计数器)
- 4. clojure中的计时器?
- 5. Clojure中标准输出的同步
- 6. Clojure与期待同步
- 7. CPP中的计时器同步问题?
- 8. Java同步计数器 - get()怎么办?
- 9. SQL计数器递增/递减同步
- 10. 通过网络同步计数器
- 11. Seekbar与计时器同步
- 12. .net中的数据同步设计
- 13. 如何使同步计数器计数3,5,7,0并重复?
- 14. Android中的倒数计时器不同步?
- 15. 步计数器不会重置步数
- 16. Clojure计数字符串中的字数
- 17. 为Clojure中的多个阅读器/单个写入器同步线程
- 18. 如何同步服务器的javascript倒数计时器
- 19. 在Clojure中计数中止的事务
- 20. Clojure STM(dosync)x Java同步块
- 21. Clojure的计算机代数
- 22. Clojure的core.logic计数元素
- 23. 步计数器应用程序,如计步器在android
- 24. 如何同步计时器事件?
- 25. 使进度条与计时器同步
- 26. 如何通过iPad上的套接字同步计数器
- 27. 在Android步计数器(计数器传感器不起作用)
- 28. Clojure - 用大数来计算
- 29. 本地数据库与同步适配器的自动同步
- 30. 在Clojure中实现整数?在计划
将它提供更好的吞吐量然后使用挥发性诠释?如果是的话,任何关于为什么/如何更好的见解。 – 142857
一个原子比volatile变得慢一点。但是除非你每秒钟计数数百万次事件,否则差别不会太大。在吞吐量的水平上,一个易失性int会在不到一个小时内溢出...... – mikera
在Clojure 1.3上,它可能溢出:'(swap!(atom 9223372036854775807)inc)'抛出一个溢出异常。解决方法是使用BigInts:'(swap!(atom 9223372036854775807N)inc)'或自动提升'inc''功能 –