今天在优化项目,看了几个关键路径上的调用,
有些是可以并发的,有些是需要加写锁的,
如果想在整条调用路径上做文章相当复杂,需要时间做不少分析,
接着又发现虽然不少地方都有写锁,但是真正触发这些写锁的机会不是很大。
在这种情况下,突然有一种想法,就是另写一条没有写锁的调用路径,
无写锁路径上的方法写法十分简单,在原本方法触发写锁的地方直接返回调用失败就好了,
若无写锁路径调用失败,再调一次原始的路径也就OK了。
简单说来就是这样:
if (!MethodReadOnly()) {
return Method();
}
bool MethodReadOnly() {
ReadLock();
}
bool Method() {
WriteLock();
}
这个简单的优化,使得效率高了不少。
事后想想,其实这种模式挺适合cache服务的。