From: qydysky Date: Sun, 7 Feb 2021 11:55:58 +0000 (+0800) Subject: 104 X-Git-Tag: v0.3.13 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=1b9a107c3938791408490d8d5398e9acb5bb5300;p=part%2F.git 104 --- diff --git a/tmplKV/tmplK.go b/tmplKV/tmplK.go index c910ab3..34ab4cb 100644 --- a/tmplKV/tmplK.go +++ b/tmplKV/tmplK.go @@ -10,6 +10,7 @@ type tmplK struct { SumInDruation int64 Druation int64 now int64 + deleteNum int pool *idpool.Idpool kvt_map map[string]tmplK_item sync.RWMutex @@ -33,13 +34,6 @@ func New_tmplK(SumInDruation,Druation int64) (*tmplK) { ticker := time.NewTicker(time.Second) for{ s.now = (<- ticker.C).Unix() - go func(){ - tmp := make(map[string]tmplK_item) - s.Lock() - for k,v := range s.kvt_map {tmp[k] = v} - s.kvt_map = tmp - s.Unlock() - }() } }() @@ -86,6 +80,11 @@ func (s *tmplK) Get(key string) (isLive bool,id uintptr){ s.pool.Put(tmp.uid) s.Lock() delete(s.kvt_map,key) + s.deleteNum += 0 + if s.deleteNum > len(s.kvt_map) { + s.deleteNum = 0 + go s.Tidy() + } s.Unlock() } return @@ -99,3 +98,11 @@ func (s *tmplK) Check(key string,id uintptr) bool { func (s *tmplK) Buf() (int64,int) { return s.now,len(s.kvt_map) } + +func (s *tmplK) Tidy() { + tmp := make(map[string]tmplK_item) + s.Lock() + for k,v := range s.kvt_map {tmp[k] = v} + s.kvt_map = tmp + s.Unlock() +} \ No newline at end of file diff --git a/tmplKV/tmplV.go b/tmplKV/tmplV.go index 102f964..6cf2c4c 100644 --- a/tmplKV/tmplV.go +++ b/tmplKV/tmplV.go @@ -10,6 +10,7 @@ type tmplV struct { SumInDruation int64 Druation int64 now int64 + deleteNum int pool *idpool.Idpool kvt_map map[uintptr]tmplV_item sync.RWMutex @@ -33,13 +34,6 @@ func New_tmplV(SumInDruation,Druation int64) (*tmplV) { ticker := time.NewTicker(time.Second) for{ s.now = (<- ticker.C).Unix() - go func(){ - tmp := make(map[uintptr]tmplV_item) - s.Lock() - for k,v := range s.kvt_map {tmp[k] = v} - s.kvt_map = tmp - s.Unlock() - }() } }() @@ -84,6 +78,10 @@ func (s *tmplV) Get(key uintptr) (isLive bool,contect string){ s.pool.Put(K.uid) s.Lock() delete(s.kvt_map,key) + if s.deleteNum > len(s.kvt_map) { + s.deleteNum = 0 + go s.Tidy() + } s.Unlock() } return @@ -97,3 +95,11 @@ func (s *tmplV) Check(key uintptr,contect string) bool { func (s *tmplV) Buf() (int64,int) { return s.now,len(s.kvt_map) } + +func (s *tmplV) Tidy() { + tmp := make(map[uintptr]tmplV_item) + s.Lock() + for k,v := range s.kvt_map {tmp[k] = v} + s.kvt_map = tmp + s.Unlock() +} \ No newline at end of file