[Go] 利用有缓存channel控制同时并发的数量

前端之家收集整理的这篇文章主要介绍了[Go] 利用有缓存channel控制同时并发的数量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

如果有一个大循环,里面每一个都开启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: %d\n",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

看时间每次只是同时执行两个

猜你在找的Go相关文章