refactor(concurrency): replaced manual WaitGroup management with new wg.Go() and removed redundant code.

This commit is contained in:
yusing
2025-08-16 23:14:40 +08:00
parent 7a9b8b3fb9
commit 11af9d107a
8 changed files with 35 additions and 59 deletions

View File

@@ -23,11 +23,9 @@ import (
func parallel(fns ...func()) { func parallel(fns ...func()) {
var wg sync.WaitGroup var wg sync.WaitGroup
for _, fn := range fns { for _, fn := range fns {
wg.Add(1) wg.Go(func() {
go func() {
defer wg.Done()
fn() fn()
}() })
} }
wg.Wait() wg.Wait()
} }

View File

@@ -24,6 +24,7 @@ import (
func NewHandler() *gin.Engine { func NewHandler() *gin.Engine {
gin.SetMode("release") gin.SetMode("release")
r := gin.New() r := gin.New()
r.Use(NoCache())
r.Use(ErrorHandler()) r.Use(ErrorHandler())
r.Use(ErrorLoggingMiddleware()) r.Use(ErrorLoggingMiddleware())
@@ -113,6 +114,15 @@ func NewHandler() *gin.Engine {
return r return r
} }
func NoCache() gin.HandlerFunc {
return func(c *gin.Context) {
c.Header("Cache-Control", "no-cache, no-store, must-revalidate")
c.Header("Pragma", "no-cache")
c.Header("Expires", "0")
c.Next()
}
}
func AuthMiddleware() gin.HandlerFunc { func AuthMiddleware() gin.HandlerFunc {
if !auth.IsEnabled() { if !auth.IsEnabled() {
return func(c *gin.Context) { return func(c *gin.Context) {

View File

@@ -79,39 +79,29 @@ func getSystemInfo(ctx context.Context, lastResult *SystemInfo) (*SystemInfo, er
var wg sync.WaitGroup var wg sync.WaitGroup
if !common.MetricsDisableCPU { if !common.MetricsDisableCPU {
wg.Add(1) wg.Go(func() {
go func() {
defer wg.Done()
errs.Add(s.collectCPUInfo(ctx)) errs.Add(s.collectCPUInfo(ctx))
}() })
} }
if !common.MetricsDisableMemory { if !common.MetricsDisableMemory {
wg.Add(1) wg.Go(func() {
go func() {
defer wg.Done()
errs.Add(s.collectMemoryInfo(ctx)) errs.Add(s.collectMemoryInfo(ctx))
}() })
} }
if !common.MetricsDisableDisk { if !common.MetricsDisableDisk {
wg.Add(1) wg.Go(func() {
go func() {
defer wg.Done()
errs.Add(s.collectDisksInfo(ctx, lastResult)) errs.Add(s.collectDisksInfo(ctx, lastResult))
}() })
} }
if !common.MetricsDisableNetwork { if !common.MetricsDisableNetwork {
wg.Add(1) wg.Go(func() {
go func() {
defer wg.Done()
errs.Add(s.collectNetworkInfo(ctx, lastResult)) errs.Add(s.collectNetworkInfo(ctx, lastResult))
}() })
} }
if !common.MetricsDisableSensors { if !common.MetricsDisableSensors {
wg.Add(1) wg.Go(func() {
go func() {
defer wg.Done()
errs.Add(s.collectSensorsInfo(ctx)) errs.Add(s.collectSensorsInfo(ctx))
}() })
} }
wg.Wait() wg.Wait()

View File

@@ -130,10 +130,9 @@ func TestFinishMultipleCalls(t *testing.T) {
n := 20 n := 20
wg.Add(n) wg.Add(n)
for range n { for range n {
go func() { wg.Go(func() {
defer wg.Done()
task.Finish(nil) task.Finish(nil)
}() })
} }
wg.Wait() wg.Wait()
} }

View File

@@ -62,15 +62,13 @@ func (m Map[KT, VT]) RangeAllParallel(do func(k KT, v VT)) {
} }
var wg sync.WaitGroup var wg sync.WaitGroup
for k, v := range m.Range {
m.Range(func(k KT, v VT) bool {
wg.Add(1) wg.Add(1)
go func() { go func(k KT, v VT) {
defer wg.Done()
do(k, v) do(k, v)
wg.Done() }(k, v)
}() }
return true
})
wg.Wait() wg.Wait()
} }

View File

@@ -1,8 +1,6 @@
package functional package functional
import ( import (
"sync"
"github.com/puzpuzpuz/xsync/v4" "github.com/puzpuzpuz/xsync/v4"
) )
@@ -44,20 +42,6 @@ func (set Set[T]) RangeAll(f func(T)) {
}) })
} }
func (set Set[T]) RangeAllParallel(f func(T)) {
var wg sync.WaitGroup
set.Range(func(k T) bool {
wg.Add(1)
go func() {
f(k)
wg.Done()
}()
return true
})
wg.Wait()
}
func (set Set[T]) Size() int { func (set Set[T]) Size() int {
return set.m.Size() return set.m.Size()
} }

View File

@@ -92,16 +92,15 @@ func NewBidirectionalPipe(ctx context.Context, rw1 io.ReadWriteCloser, rw2 io.Re
func (p BidirectionalPipe) Start() error { func (p BidirectionalPipe) Start() error {
var wg sync.WaitGroup var wg sync.WaitGroup
wg.Add(2)
var srcErr, dstErr error var srcErr, dstErr error
go func() { wg.Go(func() {
srcErr = p.pSrcDst.Start() srcErr = p.pSrcDst.Start()
wg.Done() wg.Done()
}() })
go func() { wg.Go(func() {
dstErr = p.pDstSrc.Start() dstErr = p.pDstSrc.Start()
wg.Done() wg.Done()
}() })
wg.Wait() wg.Wait()
return errors.Join(srcErr, dstErr) return errors.Join(srcErr, dstErr)
} }

View File

@@ -12,14 +12,12 @@ func TestRefCounterAddSub(t *testing.T) {
rc := NewRefCounter() // Count starts at 1 rc := NewRefCounter() // Count starts at 1
var wg sync.WaitGroup var wg sync.WaitGroup
wg.Add(2)
rc.Add() rc.Add()
for range 2 { for range 2 {
go func() { wg.Go(func() {
defer wg.Done()
rc.Sub() rc.Sub()
}() })
} }
wg.Wait() wg.Wait()