## go如何透過訊號量控制併發量?
看程式碼
package main
import (
"fmt"
"math"
"sync"
"time"
)
var wg08 sync.WaitGroup
var chSem chan int
func main() {
//透過管道定義訊號量5個 意思代表只能有五個同時併發
chSem = make(chan int, 5)
//起100個任務併發處理
for i := 0; i < 100; i++ {
wg08.Add(1)//等待組
go getSqrt(i)//開闢協程處理
}
wg08.Wait()//等待組阻塞主協程
}
func getSqrt(n int) {
//規定:所有併發任務都必須註冊在訊號量管道里
chSem <- n
fmt.Printf("%d的平方根是%.2f\n", n, math.Sqrt(float64(n)))
<- time.After(10 * time.Second)//定時器
//任務結束後從訊號量管道登出,給其它騰出空間
<-chSem
wg08.Done()
}
看下輸出內容 5個 5個的列印
本作品採用《CC 協議》,轉載必須註明作者和本文連結