技术名词~

本文探讨了CopyOnWrite技术的起源,如Linux fork和exec中的应用,重点介绍了Redis在RDB持久化中的使用以及Java的CopyOnWriteArrayList和CopyOnWriteArraySet。文章解释了如何在读多写少场景下提升并发性能,并提到了ReentrantLock在CopyOnWrite中的关键作用。
摘要由CSDN通过智能技术生成

CopyOnWrite (写时复制)

前提是本来要变成俩份数据,做一次复制的。但是先不做,放到写操作的时候,再写成俩份。

Linux的CopyOnWrit 最初是linux的线程的fork()与exec()函数。为了少一次复制快速创建子线程。
Redis的CopyOnWrite 在RDB的时候,主线程不去copy而是正常的读写等真正的有额写入操作RDB才去写入被修改的内存。
JAVA的CopyOnWrite 就是 CopyOnWriteArrayList,CopyOnWriteArrayList是ArrayList的线程安全版本,从他的名字可以推测,CopyOnWriteArrayList是在有写操作的时候会copy一份数据,然后写完再设置成新的数据。CopyOnWriteArrayList适用于读多写少的并发场景,CopyOnWriteArraySet是线程安全版本的Set实现,它的内部通过一个CopyOnWriteArrayList来代理读写等操作,使得CopyOnWriteArraySet表现出了和CopyOnWriteArrayList一致的并发行为。CopyOnWriteArrayList使用了ReentrantLock来支持并发操作 set、add方法,array就是实际存放数据的数组对象。ReentrantLock是一种支持重入的独占锁,任意时刻只允许一个线程获得锁,所以可以安全的并发去写数组。底部实现(这里是数组)
get方法不加锁直接返回。
volatile 修饰,保证一致性
写时复制,写完更新引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值