[Go] 利用有缓存channel控制同时并发的数量
发布时间:2021-05-21 06:46:55 所属栏目:大数据 来源: https://www.jb51.cc
导读:如果有一个大循环,里面每一个都开启groutine,那么瞬间就会开启非常多的groutine,要解决这个问题就要用channel的阻塞特性来解决 package mainimport " time " import fmt func main() { control : = make (chan interface{}, 2 ) for i := 1 ; i = 10 ; i++ {
如果有一个大循环,里面每一个都开启groutine,那么瞬间就会开启非常多的groutine,要解决这个问题就要用channel的阻塞特性来解决 package main import "time" import fmt func main() { control := make(chan interface{},2) for i := 1; i <= 10; i++ { control <- i //这里应该放上面,如果放下面就会每次都执行三个了 go func(j int) { fmt.Printf(go func: %d,time: %dn",j,time.Now().Unix()) time.Sleep(.Second) <-control }(i) } 主groutine不要断 for { .Second) } } go func: 2,1)">time: 1574427632 go func: 1,1)">4,1)">15744276333,1)">5,1)">15744276346,1)">7,1)">15744276358,1)">9,1)">157442763610,1)">1574427636 看时间每次只是同时执行两个 (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |