简单的demo:
func worker(i int, jobs <-chan int, result chan<- int) {
for j := range jobs {
fmt.Printf("worker %d started job %d\n", i, j)
// 模拟工作耗时,这里为随机时间
sleepTime := rand.Intn(3) + 1
time.Sleep(time.Duration(sleepTime) * time.Second)
fmt.Printf("worker %d finished job %d with sleep time %d s\n", i, j, sleepTime)
result <- j
}
}
func main() {
const totalJobs = 20
jobs := make(chan int, totalJobs)
results := make(chan int, totalJobs)
defer close(results)
const numWorker = 3 //起3个协程池去工作
for i := 0; i < numWorker; i++ {
go worker(i, jobs, results)
}
//不断的往池里面发布作业
for k := 0; k < totalJobs; k++ {
jobs <- k
}
//作业发完关闭channel
close(jobs)
for a := 0; a < totalJobs; a++ {
fmt.Println("=============res:", <-results)
}
}
集成好的包:
https://github.com/panjf2000/ants/blob/master/README_ZH.md