diff --git a/internal/utils/expires/list.go b/internal/utils/expires/list.go index 560e751..c61caff 100644 --- a/internal/utils/expires/list.go +++ b/internal/utils/expires/list.go @@ -63,7 +63,11 @@ func (this *List) Remove(itemId int64) { func (this *List) GC(timestamp int64, callback func(itemId int64)) { this.locker.Lock() - itemMap := this.gcItems(timestamp) + var itemMap = this.gcItems(timestamp) + if len(itemMap) == 0 { + this.locker.Unlock() + return + } this.locker.Unlock() if callback != nil { diff --git a/internal/utils/expires/list_test.go b/internal/utils/expires/list_test.go index e491ec4..cb6a2b7 100644 --- a/internal/utils/expires/list_test.go +++ b/internal/utils/expires/list_test.go @@ -165,3 +165,21 @@ func Benchmark_Map_Uint64(b *testing.B) { } } } + +func BenchmarkList_GC(b *testing.B) { + runtime.GOMAXPROCS(1) + + var lists = []*List{} + + for i := 0; i < 100; i++ { + lists = append(lists, NewList()) + } + + var timestamp = time.Now().Unix() + + for i := 0; i < b.N; i++ { + for _, list := range lists { + list.GC(timestamp, nil) + } + } +}