在分布式的程式中,cache的合理使用可以帶來效能上的極大提公升,尤其是在資源建立需要昂貴的開銷時。cache的設計最重要的是要保證執行緒安全和高效性。下面以**為例,介紹了三種cache的寫法。
1. 粗放的加鎖
public class cache12. 讀寫鎖public synchronized servergroup get(string routekey) throws ioexception
return sg;
} public synchronized void remove(string routekey)
private servergroup getservergroup(string routekey) throws ioexception
}
public class cache23. 無鎖public servergroup get(string routekey) throws ioexception
lock.readlock().lock();
lock.writelock().unlock();
}} catch (ioexception e)
lock.readlock().unlock();
return sg;
} public void remove(string routekey) finally
} private servergroup getservergroup(string routekey) throws ioexception
}
public class cache3總結,public servergroup get(string routekey) throws ioexception, interruptedexception, executionexception
futuretasksft = new futuretask(new constructsgtask(routekey));
futuretaskold = route2sgft.putifabsent(routekey, sft);
if (old == null)
return old.get();
} public void remove(string routekey)
class constructsgtask implements callable
@override
public servergroup call() throws exception
} private servergroup getservergroup(string routekey) throws ioexception
}
從三份**中可以看出,鎖的粒度從粗放到無,這個就極大的提高了cache的併發性。
乙個cache的改造過程
在分布式的程式中,cache的合理使用可以帶來效能上的極大提公升,尤其是在資源建立需要昂貴的開銷時。cache的設計最重要的是要保證執行緒安全和高效性。下面以 為例,介紹了三種cache的寫法。1.粗放的加鎖 code public class cache1 public synchronized ...
cache的改造過程
乙個cache的改造過程 在分布式的程式中,cache的合理使用可以帶來效能上的極大提公升,尤其是在資源建立需要昂貴的開銷時。cache的設計最重要的是要保證執行緒安全和高效性。下面以 為例,介紹了三種cache的寫法。1.粗放的加鎖 public class cache1 public synch...
模擬乙個js new乙個物件的過程
function person person.prototype.getname function function createobj var a createobj person console.log a 上述 createobj 模擬了js new乙個物件的過程,從該函式的 中可以清晰的看到...