为以下问题寻找更 Go-ish 的解决方案:
比如说,一个服务器有多个并行传入的请求,请求一个带有 key 的资源key。由于计算这个资源是昂贵的/耗时的,我们希望确保它只计算一次。有无数个可能的键。
一个天真的实现:
if hasCachedValue(key) {
return cachedValue(key)
}
if somebodyElseWorkingOn(key) {
waitUntilReady(key)
} else {
buildCacheValue(key) // time consuming
}
return cachedValue(key)
到目前为止,我们已经使用 shared 解决了这个问题map[string]chan bool,其中第一个请求插入 chan key,当值准备好时,以下请求等待该 chan 的关闭。为了保护地图,我们使用了sync.Mutex,但我们感觉有一个更好、更 Go-ish 的解决方案。
ITMISS
慕田峪9158850
浮云间
相关分类