以下内容为本人的烂笔头,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/Rk2-tjIIbUh6yylPHZzEEg
什么是「COW」?它和代码性能、空间利用有什么关系?
设想,有个数据缓存,我们创建它用于存放数据。有数据更新时,我们就写入或者修改其中的数据,但是大部分时间我们都是在读其中的数据,即使拷贝数据也仅是为了单纯的读取。
如果每次从缓冲中读取数据,都要将数据完整拷贝一份过来,并存放在独享的另存空间里。据为己有,仅仅为了方便于后边可能会出现的修改数据的场景,这样岂不是既浪费存储空间,又浪费算力做无用功,占用 CPU 资源进而降低程序的运行效率。
可见,一般思路的读数据方法是有很大优化空间的。其实,在修改数据之前,被读取的内容大可不必真的另存,读数据只是为了了解状态,那么继续和数据的源有者共享不好吗?
这时就出现了一种需求,拷贝数据不需要真的复制数据,而只需要复制数据地址,达到数据共享,直到有一方需要修改其中的数据,在修改之前触发真正的复制,包括重新分配空间然后填充拷贝内容,这就是所谓的写时复制 (Copy-On-write),简称 COW。
巧的是,浅拷贝(shallow copy)和深拷贝(deep copy)说的也是类似意思。深拷贝和