1. 程式人生 > >Golang 執行緒池

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 }

 

 

就是這樣。有問題,但能用。