是否有任何發佈的微基準比較Scala可變集合和不可變集合,以及多線程環境中的集合java.util.concurrent
?我特別感興趣的是讀者遠遠多於編寫者的情況,比如在服務器端代碼中緩存HashMaps。微基準比較Scala可變,不可變集合與java.util.concurrent。*集合
Clojure集合的微基準也是可以接受的,因爲它們的算法類似於Scala 2.8持久集合中使用的算法。
我會寫我自己的,如果還沒有完成,但寫出好的微基準不是微不足道的。
是否有任何發佈的微基準比較Scala可變集合和不可變集合,以及多線程環境中的集合java.util.concurrent
?我特別感興趣的是讀者遠遠多於編寫者的情況,比如在服務器端代碼中緩存HashMaps。微基準比較Scala可變,不可變集合與java.util.concurrent。*集合
Clojure集合的微基準也是可以接受的,因爲它們的算法類似於Scala 2.8持久集合中使用的算法。
我會寫我自己的,如果還沒有完成,但寫出好的微基準不是微不足道的。
有一些成果在這裏比較的Java哈希映射,斯卡拉哈希映射,Java的併發哈希映射,Java的併發跳躍列表,Java的並行陣列和Scala並行集合(在技術報告的結尾):
http://infoscience.epfl.ch/record/165523/files/techrep.pdf
有併發跳躍列表和Java併發散的更詳細的比較映射在這裏(也以報告的主要部分的結束,闌尾前):
http://infoscience.epfl.ch/record/166908/files/ctries-techreport.pdf
這些微基準專注於測試單個操作的性能。如果你打算寫你自己的基準,這將可能是有用的:
非常好!謝謝。 – Ralph
您可以在這裏找到第一篇論文中的一些基準測試的源代碼:http://lampsvn.epfl.ch/svn-repos/scala/scala/trunk/test/benchmarks/,但它們有些沒有結構化。對於第二個:https://github.com/axel22/Ctries,看一下src/bench。 – axel22
以下是關於Scala收集操作的詳細基準:https://github.com/scalameter/scalameter/tree/master/src/test/scala/org/scalameter/collections – axel22
黎蒿銥的Benchmarking Scala Collections是一個詳細而全面的研究,解決您的查詢。在這裏引用太長了。
我認爲你不可能得到比較可變集合和不可變集合的任何合理基準,因爲應用程序本身的設計是不同的。 –
@Daniel:我們目前有一些Java服務器代碼,其中包含每次寫入時讀取約1,000,000次的HashMaps。該代碼使用'synchronized',但讀者爲所有這些競爭性讀取付費,即使數據是有效的不可變的。我認爲只有在用包含新項目的新「已複製」集合替換舊集合時,我才能夠使用functionaljava的持久集合並鎖定。 – Ralph
看起來像一個合理的期望,它說明了基準測試的問題。如果你測試這種負載,你是爲了不變性而進行偏置。但請注意,使用不可變映射時,無論何時更新,都必須重新映射映射,這意味着您需要以某種方式序列化所有更新。如果您不介意讀取滯後寫入,那麼映射本身可能會被一個易變的指向。 –