golang_如何控制并发执行的 Goroutine 的最大数目?

时间:2025-03-30 13:40:18
  1. demo01:
var ch chan int
func test(i int) {
	fmt.Println(i)
	time.Sleep(1 * 1e9)
	<-ch
}
func main() {
	ch = make(chan int, 10)
	for i:=0; i<1000; i++ {
		ch<-i
		go test(i)
	}
}
  1. demo02:
type pool struct {
	maxNum int // 最大Goroutine 数目
	taskChan chan *Task // 接收并传递任务的通道
}
func (pool)work(){
	for range taskChan {
		Task() // 这里执行任务
	}
}
func (pool)run(){
	for i:=0;i<pool.maxNum;i++{
		go pool.work() // 这里只启动maxNum个go程
	}
}