1.原生并发
package utils
import (
"sync"
)
var sum int
var mu sync.Mutex
func add(n int) {
mu.Lock()
sum += n
mu.Unlock()
}
func RunAdd(count int) int {
var wg sync.WaitGroup
for i := 0; i <= count; i++ {
wg.Add(1)
go func(n int) {
defer wg.Done()
add(n)
}(i)
}
wg.Wait()
return sum
}
2.使用Go 扩展库进行并发
go get github.com/sourcegraph/conc
package utils
import (
"github.com/sourcegraph/conc/pool"
)
var sumByConc int
func addByconc(i int) {
sumByConc += i
}
func AddByConc(num int) int {
p := pool.New().WithMaxGoroutines(100)
for i := 0; i <= 100; i++ {
p.Go(func() {
addByconc(i)
})
}
p.Wait()
return sumByConc
}