Copy-on-write
于在传统的使用读写锁以保证互斥操作的实现中,通常会在进行写操作时加锁,因而在写线程操作的时候,其他的读线程都必须等待。
**写时复制(copy on write)**是指多线程对保护对象进行读写操作时,执行写操作的线程在写时,会把该对象复制一份(并对复制后的对象实例进行写修改操作),最终就可以做到写操作进行的同时,不阻塞其他线程的读操作。
当在把对象复制一份完成之后,写操作完成之前,读操作来了,这时候需要先读复制后的对象(因为它是最新的),再读复制前的对象。
写时复制适合读多写少的应用场景,比如白名单,黑名单,商品类目的访问和更新场景,而不适合内存敏感以及对实时性要求很高的场景。
优点:
- 读操作性能很高,因为无需任何同步措施,比较适用于读多写少的并发场景。
缺点:
- 缺点也很明显
- 一是内存占用问题,毕竟每次执行写操作都要将原对象拷贝一份,数据量大时,对内存压力较大,可能会引起频繁GC;
- 二是无法保证数据不一致,使用读写锁时可以保证读和写的强一致性。而CopyOnWrite由于其实现策略的原因,写和读分别作用在新老不同对象上。因而,在写操作执行过程中,读虽然不会被阻塞,但读取到的却是旧对象(或者说更新前的对象)。
Reference
FEATURED TAGS
algorithm
algorithmproblem
architecturalpattern
architecture
aws
c#
cachesystem
codis
compile
concurrentcontrol
database
dataformat
datastructure
debug
design
designpattern
distributedsystem
django
docker
domain
engineering
freebsd
git
golang
grafana
hackintosh
hadoop
hardware
hexo
http
hugo
ios
iot
java
javaee
javascript
kafka
kubernetes
linux
linuxcommand
linuxio
lock
macos
markdown
microservices
mysql
nas
network
networkprogramming
nginx
node.js
npm
oop
openwrt
operatingsystem
padavan
performance
programming
prometheus
protobuf
python
redis
router
security
shell
software testing
spring
sql
systemdesign
truenas
ubuntu
vmware
vpn
windows
wmware
wordpress
xml
zookeeper