COW就是Copy-on-Write方法,写时复制。当然COW的应用领域并不局限于Immutability模式。
COW模式应用领域
CopyOnWriteArrayList 和 CopyOnWriteArraySet 这两个Copy-on-Write容器,它们背后的设计思想就是Copy-on-Write。通过COW实现读操作无锁,将读操作的性能发挥到了极致。
COW模式更多体现的是一种延时策略,只有在真正需要复制的时候才复制,而不是提前复制好,同时在操作系统fork函数中,COW还支持按需复制,在操作系统领域是能够提升性能的。对于Java提供的COW容器,由于在修改的同时会复制整个容器,所以在提升读操作性能的同时,是以内存复制为代价的。
COW最大的应用领域还是在函数式编程领域。函数式编程的基础是不可变性,所以函数式编程里面所有的修改操作都需要COW来解决。
COW模式应用
RPC框架中Router设计,服务提供方的每一次上线,下线都会更新路由信息,这时候你有两种选择。
1,通过更新Router的一个状态位来标识,但是需要把所有访问该状态位的地方进行同步,影响性能。
2,采用Immutability模式,每次上线,下线都创建新的Router对象或者删除对应的Router的对象。由于上线,下线的频率很低,所有后者是最好的选择。
Router的实现代码如下:注意需要重写equals方法,这样CopyOnWriteArraySet的add()和remove()方法才能正常工作。
网友评论