performance improvement and small fix on loadbalancer

This commit is contained in:
yusing
2024-10-09 18:10:51 +08:00
parent 5c40f4aa84
commit d91b66ae87
11 changed files with 77 additions and 50 deletions

View File

@@ -1,6 +1,8 @@
package functional
import (
"sync"
"github.com/puzpuzpuz/xsync/v3"
"gopkg.in/yaml.v3"
@@ -75,6 +77,20 @@ func (m Map[KT, VT]) RangeAll(do func(k KT, v VT)) {
})
}
func (m Map[KT, VT]) RangeAllParallel(do func(k KT, v VT)) {
var wg sync.WaitGroup
wg.Add(m.Size())
m.Range(func(k KT, v VT) bool {
go func() {
do(k, v)
wg.Done()
}()
return true
})
wg.Wait()
}
func (m Map[KT, VT]) RemoveAll(criteria func(VT) bool) {
m.Range(func(k KT, v VT) bool {
if criteria(v) {

View File

@@ -38,6 +38,10 @@ func (s *Slice[T]) Iterator() []T {
return s.s
}
func (s *Slice[T]) Get(i int) T {
return s.s[i]
}
func (s *Slice[T]) Set(i int, v T) {
s.s[i] = v
}
@@ -76,6 +80,20 @@ func (s *Slice[T]) SafePop() T {
return s.Pop()
}
func (s *Slice[T]) Remove(criteria func(T) bool) {
for i, v2 := range s.s {
if criteria(v2) {
s.s = append(s.s[:i], s.s[i+1:]...)
}
}
}
func (s *Slice[T]) SafeRemove(criteria func(T) bool) {
s.mu.Lock()
defer s.mu.Unlock()
s.Remove(criteria)
}
func (s *Slice[T]) ForEach(do func(T)) {
for _, v := range s.s {
do(v)