加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[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

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

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读