通过“改变引用”和“加锁”的方式提高缓存访问并发度
提高缓存访问和处理的并发度,在很多缓存应用和IO应用中有很多使用场景。
一、IO当中写数据的数据缓存,保证Socket在write数据的时候,线程仍然可以向输出队列OutputBuffer当中添加要写出的数据
二、在数据库缓存log写入硬盘的过程中,使用快照技术,比如changed是要flush进硬盘的数据库修改,如果直接将整个flush过程锁死,其他数据库事务将暂停,效率低下,解决办法,将changed内容转移到snapshot中,重新new 一个对象给changed当中,在snapshot当中慢慢将数据flush进数据库,此时需要两个所
flushreadwritelock 用于锁changed
snapshotreadwritelock 用于访问snapshot内容(snapshot内容相当于已经是数据库当中的内容了,get数据的时候在cache当中不存在的时候首先在snapshot当中进行find)