zoukankan      html  css  js  c++  java
  • [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
    ", j, time.Now().Unix())
                time.Sleep(time.Second)
                <-control
            }(i)
    
        }
        //主groutine不要断
        for {
            time.Sleep(time.Second)
        }
    }
    go func: 2, time: 1574427632
    go func: 1, time: 1574427632
    go func: 4, time: 1574427633
    go func: 3, time: 1574427633
    go func: 5, time: 1574427634
    go func: 6, time: 1574427634
    go func: 7, time: 1574427635
    go func: 8, time: 1574427635
    go func: 9, time: 1574427636
    go func: 10, time: 1574427636

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

  • 相关阅读:
    COGS 2104. [NOIP2015]神奇的幻方
    洛谷 P1387 最大正方形
    包和一些常用的模块
    模块
    模块的导入和使用
    函数迭代器与生成器
    函数的小知识
    函数的闭包和装饰器
    函数的进阶
    初识函数
  • 原文地址:https://www.cnblogs.com/taoshihan/p/11914065.html
Copyright © 2011-2022 走看看