乙個cache的改造過程

2021-08-31 11:06:31 字數 1448 閱讀 5180

在分布式的程式中,cache的合理使用可以帶來效能上的極大提公升,尤其是在資源建立需要昂貴的開銷時。cache的設計最重要的是要保證執行緒安全和高效性。下面以**為例,介紹了三種cache的寫法。

1. 粗放的加鎖

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

}

2. 讀寫鎖

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

}

3. 無鎖

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乙個物件的過程,從該函式的 中可以清晰的看到...