我对CopyOnWrite的思考
生活随笔
收集整理的這篇文章主要介紹了
我对CopyOnWrite的思考
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
CopyOnWrite容器即寫的時候復制一個新的容器進行寫:通俗的理解是當我們往一個容器添加元素的時候,不直接往當前容器添加,而是先將當前容器進行Copy,復制出一個新的容器,然后在新的容器里添加元素,添加完元素之后,再將原容器的引用指向新的容器。
為什么要這么做?
我們需要了解到一個異常叫做:ConcurrentModificationException。通常對容器進行并發(fā)的讀和寫的時候會出現(xiàn)該異常,比如說foreach遍歷List的時候往其中add元素。
了解到ConcurrentModificationException異常后,我們就可以結(jié)合COW進行思考,如果寫操作的時候不復制一個容器,仍然是之前的容器,那么此時并發(fā)的讀操作就是對之前容器進行的操作,一個容器在被讀的時候,又被另外一個線程進行了寫操作,會報出上述錯誤。
所以CopyOnWrite容器也是一種讀寫分離的思想,讀和寫不同的容器,不會發(fā)生ConcurrentModificationException異常
COW帶來的好處!
可以對CopyOnWrite容器進行并發(fā)的讀,而不需要加鎖,因為當前容器不會添加任何元素。
對比Concurrent容器
- 最大的優(yōu)勢就是COW容器在被寫的時候,仍然是可以讀的。而Concurrent容器在寫的時候,不能讀。
- 不足1:COW容器在寫入的時候會進行內(nèi)部容器的復制,所以內(nèi)部實現(xiàn)上多了一份核心數(shù)據(jù)的拷貝賽所需的資源,可以理解為:拿空間換時間
- 不足2:COW容器僅僅保證了數(shù)據(jù)的最終一致性,Concurrent容器保證了數(shù)據(jù)隨時的一致性。
適用場景
- 對數(shù)據(jù)在操作過程中的一致性要求不高
- 根據(jù)上述不足1進行分析可以得出:更適用于讀大于寫的場景。換言之COW容器中保存的數(shù)據(jù)應(yīng)該是盡可能不變化的。
轉(zhuǎn)載于:https://www.cnblogs.com/LiuChunfu/p/8476650.html
總結(jié)
以上是生活随笔為你收集整理的我对CopyOnWrite的思考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法简介、7种算法分类
- 下一篇: Activity之间的通信方式