Copy-on-Write,经常被缩写为 COW 或者 CoW,顾名思义就是写时复制。
Copy-on-Write 模式的应用领域
JAVA SDK的并发容器中,CopyOnWriteArrayList 和 CopyOnWriteArraySet 这两个 Copy-on-Write 容器,它们背后的设计思想就是 Copy-on-Write;通过 Copy-on-Write 这两个容器实现的读操作是无锁的,由于无锁,所以将读操作的性能发挥到了极致。
类 Unix 的操作系统中创建进程 的 API 是 fork(),传统的 fork() 函数会创建父进程的一个完整副本。而 Linux 中的 fork() 函数就聪明得多 了,fork() 子进程的时候,并不复制整个进程的地址空间,而是让父子进程共享同一个地址 空间;只用在父进程或者子进程需要写入的时候才会复制地址空间,从而使父子进程拥有各 自的地址空间。
本质上来讲,父子进程的地址空间以及数据都是要隔离的,使用 Copy-on-Write 更多地体 现的是一种延时策略,只有在真正需要复制的时候才复制,而不是提前复制好,同时 Copy-on-Write 还支持按需复制,所以 Copy-on-Write 在操作系统领域是能够提升性能的。
很多其他领域也都能看到 Copy-on-Write 的身影:Docker 容器镜像的设计是 Copy-on-Write,甚至分布式源码管理系统 Git 背后 的设计思想都有 Copy-on-Write...
不过,Copy-on-Write 最大的应用领域还是在函数式编程领域。函数式编程的基础是不可 变性(Immutability),所以函数式编程里面所有的修改操作都需要 Copy-on-Write 来解决。
网友评论