golang控制goroutine数量

luffy1 · · 1444 次点击
我比较喜欢这种信号量的形式
#3
更多评论
https://github.com/panjf2000/ants
#1
aierui
渐进增强,优雅降级~
除了楼上采用第三方库用来生成和管理 goroutine 。 也可以通过 sync + chan 来处理。 ``` package main import ( "fmt" "runtime" "sync" "time" ) func main() { goNum := 4 channelNum := 10 ch := make(chan int, 5) var wg sync.WaitGroup for i := 0; i < goNum; i++ { wg.Add(1) // 生成指定数量的 goroutine // 每个 goroutine 接受 chan 数据 go func() { defer wg.Done() for d := range ch { fmt.Printf("index => %d, time => %d \n", d, time.Now().Unix()) //time.Sleep(time.Second * time.Duration(d)) } }() } for i := 0; i < channelNum; i++ { ch <- i fmt.Printf("index => %d, goroutine Num => %d\n", i, runtime.NumGoroutine()) //time.Sleep(time.Second) } close(ch) wg.Wait() } ``` https://play.golang.org/p/GpZbF7UFfP8
#2