建什么网站访问量高,企业网站规划方案,厦门安岭路网站建设,网站注册域名后怎么做文章目录 channelwaitGroup控制并发量前言示例 channelwaitGroup控制并发量
前言
golang的goroutine非常轻量级#xff0c;同时启动数万协程都没问题。如果不对并发量进行控制#xff0c;比如同时产生数百万的协程#xff0c;会压垮服务器通过控制channel缓冲区的大小waitGroup控制并发量前言示例 channelwaitGroup控制并发量
前言
golang的goroutine非常轻量级同时启动数万协程都没问题。如果不对并发量进行控制比如同时产生数百万的协程会压垮服务器通过控制channel缓冲区的大小从而控制并发数waitGroup保证子协程都运行完成后主协程才退出
示例
产生了100个协程控制并发数为10可以看到用时10098ms
package mainimport (fmtsynctime
)// channel WaitGroup实现控制并发数量
var maxConcurrentNum 10var chData make(chan int, maxConcurrentNum)
var wg sync.WaitGroup
var taskNum 100func main() {start_time : time.Now().UnixMilli()for i : 0; i taskNum; i {chData - 1go doTask(i)}wg.Wait()close(chData)fmt.Println(Main over)end_time : time.Now().UnixMilli()fmt.Printf(Duration: %vms, end_time-start_time)
}
func doTask(taskID int) {wg.Add(1)time.Sleep(time.Millisecond * 1000)fmt.Println(Finish task , taskID)-chDatawg.Done()
}调整并发数为50时用时2032ms