CopyOnWrite 我的理解以及應用

原因

最近在看《Redis 設計與實現》,看到Redis的執行bgsave生成dump.rdb是根據CopyOnWrite
以前也不是很懂爲啥要有CopyOnWrite這個東西
翻看文章搞明白了安全

若是有多個調用者(callers)同時請求相同資源(如內存或磁盤上的數據存儲),他們會共同獲取相同的指針指向相同的資源,直到某個調用者試圖修改資源的內容時,系統纔會真正複製一份專用副本(private copy)給該調用者,而其餘調用者所見到的最初的資源仍然保持不變。優勢是若是調用者沒有修改該資源,就不會有副本(private copy)被創建,所以多個調用者只是讀取操做時能夠共享同一份資源線程

以前一直以爲CopyOnWrite很雞肋.設計


如今解釋一下:
CopyOnWrite就是不一樣的線程操做不一樣的資源,最後再整合,所以是線程安全的,但不能保證強一致性指針

好比我如今數據 1234 我要插入5code

那麼原來的線程看到的數據是 1234 我新開的線程看到的數據是 12345
而且CopyOnWriteList中的setadd 方法都是加鎖了的,因此至多有一份拷貝。當這份拷貝資源執行完後,纔會釋放鎖,進行下次的setadd方法內存

參考博客

CopyOnWriteArrayList資源

相關文章
相關標籤/搜索