在分布式的程式中,cache的合理使用可以帶來效能上的極大提公升,尤其是在資源建立需要昂貴的開銷時。cache的設計最重要的是要保證執行緒安全和高效性。下面以**為例,介紹了三種cache的寫法。
1. 粗放的加鎖
[code]
public class cache1
public synchronized servergroup get(string routekey) throws ioexception
return sg;
}public synchronized void remove(string routekey)
private servergroup getservergroup(string routekey) throws ioexception
}[/code]
2. 讀寫鎖
[code]
public class cache2
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
}[/code]
3. 無鎖
[code]
public class cache3
public servergroup get(string routekey) throws ioexception, interruptedexception, executionexception
futuretask sft = new futuretask(new constructsgtask(routekey));
futuretask old = 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
}[/code]
總結,從三份**中可以看出,鎖的粒度從粗放到無,這個就極大的提高了cache的併發性。
乙個cache的改造過程
在分布式的程式中,cache的合理使用可以帶來效能上的極大提公升,尤其是在資源建立需要昂貴的開銷時。cache的設計最重要的是要保證執行緒安全和高效性。下面以 為例,介紹了三種cache的寫法。1.粗放的加鎖 public class cache1 public synchronized serve...
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乙個物件的過程,從該函式的 中可以清晰的看到...