3 回答

TA貢獻1824條經驗 獲得超5個贊
既然沒有其他人提到過,我將提供一種可能適合或不適合您特定目的的替代方法:
Microsoft不可變集合
來自MS團隊背后的博客文章:
盡管并發創建和運行比以往任何時候都容易,但基本問題之一仍然存在:可變的共享狀態。從多個線程讀取通常非常容易,但是一旦需要更新狀態,狀態就會變得困難得多,尤其是在需要鎖定的設計中。
鎖定的替代方法是使用不可變狀態。不變的數據結構保證永遠不會改變,因此可以在不同線程之間自由傳遞,而不必擔心踩到別人的腳趾。
但是,這種設計帶來了一個新問題:如何在不每次都復制整個狀態的情況下管理狀態更改?當涉及集合時,這尤其棘手。
這是不可變集合的來源。
這些集合包括ImmutableHashSet <T>和ImmutableList <T>。
性能
由于不可變集合使用下面的樹數據結構來實現結構共享,因此它們的性能特征不同于可變集合。與鎖定可變集合進行比較時,結果將取決于鎖定爭用和訪問模式。但是,取自關于不可變集合的另一篇博客文章:
問:我聽說不可變的收藏很慢。這些有什么不同嗎?當性能或內存很重要時,可以使用它們嗎?
答:這些不可變的集合已經過高度調整,在平衡內存共享的同時具有可變集合的競爭性能。在某些情況下,它們在算法上和實際時間上幾乎與可變集合一樣快,有時甚至更快,而在其他情況下,它們在算法上更復雜。但是,在許多情況下,差異可以忽略不計。通常,您應該使用最簡單的代碼來完成工作,然后根據需要調整性能。不可變的集合可幫助您編寫簡單的代碼,尤其是在必須考慮線程安全性的情況下。
換句話說,在許多情況下,差異不會很明顯,您應該選擇更簡單的選擇-對于并發集,將使用ImmutableHashSet<T>,因為您沒有現有的鎖定可變實現!:-)
- 3 回答
- 0 關注
- 748 瀏覽
添加回答
舉報