作者:fengzi199171 | 来源:互联网 | 2023-09-04 09:07
krisji记录自己学习go的知识点以及工作上的实战,各位小伙伴们赶紧上车咯~ ##go如何通过信号量控制并发量?看代码packagemainimport(fmtmath
krisji 记录自己学习go的知识点以及工作上的实战,各位小伙伴们赶紧上车咯~
## 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个的打印