乙個cache的改造過程

2021-08-30 22:54:16 字數 1492 閱讀 5155

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