Golang 线程池
Posted qufo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang 线程池相关的知识,希望对你有一定的参考价值。
经常会用到协程,但是不能一下开那么多协调,只需要 poolSize 个即可,多了不行。这些个协程在执行完后必须等其完成之后才能进行下一步动作。假定工作方法为 work 。
package main import ( "fmt" "runtime" "sync" "time" ) // WAIT GROUP var wg sync.WaitGroup var IDS_ALL = []int {40,42,43,44,164,166,171,173,174,175,177,518,192,193} func main () { fmt.Println("BEGIN") poolSize := runtime.NumCPU() runtime.GOMAXPROCS(poolSize) ch := make(chan int,poolSize) for _,catid := range IDS_ALL { ch <- 1 wg.Add(1) go work(catid,ch) } wg.Wait() close(ch) fmt.Println("DONE") } // 工作 func work(catid int,ch chan int) { fmt.Println("WORKING ",catid) time.Sleep(2 * 1e9) wg.Done() <-ch }
就是这样。有问题,但能用。
以上是关于Golang 线程池的主要内容,如果未能解决你的问题,请参考以下文章