如果我想保留一個全局計數器(例如計算跨多個線程的傳入請求數),那麼在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中的計時器?
- 3. Clojure與期待同步
- 4. 如何使同步計數器計數3,5,7,0並重復?
- 5. Clojure計數字符串中的字數
- 6. 爲Clojure中的多個閱讀器/單個寫入器同步線程
- 7. 如何同步服務器的javascript倒數計時器
- 8. Clojure STM(dosync)x Java同步塊
- 9. Clojure的計算機代數
- 10. 步計數器應用程序,如計步器在android
- 11. 使進度條與計時器同步
- 12. 如何通過iPad上的套接字同步計數器
- 13. 本地數據庫與同步適配器的自動同步
- 14. Android:與同步適配器定期同步的設計考慮因素
- 15. 在不同瀏覽器上同步的javascript倒計時
- 16. ASP/AJAX - 與服務器計時器同步的客戶端計時器
- 17. Linux如何同步搶佔計數
- 18. 計數兩個同步列表
- 19. 需要同步增量專用計數器嗎?
- 20. 同步倒數計時器和進度條
- 21. 需要一些幫助同步外環計數器與dialog.onconfirm()
- 22. 如何同步倒數計時器到所有用戶
- 23. Java同步器
- 24. 使用JPA在數據庫中更新計數器,避免手動同步
- 25. 同步表中的數據
- 26. C#中的數據同步#
- 27. 如何獲取計步器步數數據與齒輪s2中的SHealth(Tizen 2.3.2)相同?
- 28. Clojure中的處理器數量? Java interop
- 29. 索引服務設計 - 同步/異步
- 30. WP7 SDK計步器
將它提供更好的吞吐量然後使用揮發性詮釋?如果是的話,任何關於爲什麼/如何更好的見解。 – 142857
一個原子比volatile變得慢一點。但是除非你每秒鐘計數數百萬次事件,否則差別不會太大。在吞吐量的水平上,一個易失性int會在不到一個小時內溢出...... – mikera
在Clojure 1.3上,它可能溢出:'(swap!(atom 9223372036854775807)inc)'拋出一個溢出異常。解決方法是使用BigInts:'(swap!(atom 9223372036854775807N)inc)'或自動提升'inc''功能 –