CopyOnWrite 我的理解以及应用

原因

最近在看《Redis 设计与实现》,看到Redis的执行bgsave生成dump.rdb是根据CopyOnWrite
以前也不是很懂为啥要有CopyOnWrite这个东西
翻看文章搞明白了安全

若是有多个调用者(callers)同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本(private copy)给该调用者,而其余调用者所见到的最初的资源仍然保持不变。优势是若是调用者没有修改该资源,就不会有副本(private copy)被创建,所以多个调用者只是读取操做时能够共享同一份资源线程

以前一直以为CopyOnWrite很鸡肋.设计


如今解释一下:
CopyOnWrite就是不一样的线程操做不一样的资源,最后再整合,所以是线程安全的,但不能保证强一致性指针

好比我如今数据 1234 我要插入5code

那么原来的线程看到的数据是 1234 我新开的线程看到的数据是 12345
而且CopyOnWriteList中的setadd 方法都是加锁了的,因此至多有一份拷贝。当这份拷贝资源执行完后,才会释放锁,进行下次的setadd方法内存

参考博客

CopyOnWriteArrayList资源

相关文章
相关标签/搜索