首页 > 其他分享 >使用channel控制并发数

使用channel控制并发数

时间:2022-12-06 16:56:33浏览次数:41  
标签:wg 控制 string rand fmt 并发 func time channel

package concurrent_test

import (
    "fmt"
    "math/rand"
    "sync"
    "testing"
    "time"
)

func init() {
    rand.Seed(time.Now().UnixNano())
}

// 使用channel控制并发数

var lst = []string{
    "whw1", "whw2", "whw3", "whw4", "whw5", "whw6", "whw7", "whw8", "whw9",
    "whw10", "whw11", "whw12", "whw13", "whw14", "whw15", "whw16", "whw17", "whw18", "whw19",
}

func TestChanControlGos(t *testing.T) {

    var wg sync.WaitGroup
    limitChan := make(chan struct{}, 3) // 最多同时有3个协裎同时工作

    for _, item := range lst {
        wg.Add(1)
        limitChan <- struct{}{}
        // 注意: 如果要用lst中的元素,一定要定义在func下并当作参数传入!
        go func(s string) {
            defer wg.Done()
            consumeStr(s, limitChan)
        }(item)
    }

    wg.Wait()
    fmt.Println("主协裎结束......")

}

func consumeStr(name string, limitCh chan struct{}) {
    defer func() {
        <-limitCh
    }()
    time.Sleep(time.Duration(rand.Intn(2)) * time.Second) // 模拟延迟
    fmt.Println("name: ", name)
}

~~~

标签:wg,控制,string,rand,fmt,并发,func,time,channel
From: https://www.cnblogs.com/paulwhw/p/16955785.html

相关文章

  • vue3 input 控制小数位 自定义指令
    创建文件 globalindex.ts main.ts文件引入importglobalfrom"@/global";app.use(global)index.ts    内容import{App}from"vue";exportdefaul......
  • 拆解硬件_LED灯带控制器_221206
    LED灯带控制器拆解日期:2022年12月06日拆解人:ZHOUTOP面全背面无元件MOS09N03ADataSheet:https://www.jianguoyun.com/p/DYFY1MwQ0erfChjLj-sEIAAEEROMAIM24C02D......
  • spring控制事务回滚:TransactionAspectSupport.currentTransactionStatus().setRollbac
    spring事务控制手动回滚:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();1、说明事务是我们开发过程中经常会使用到的,为了在业务执行过程中出......
  • JS特殊语法 流程控制语句
    语局以;结尾如果一行只有一条语句则;可以省略(不建议)变量的定义使用var关键字也可以不使用用:定义的变量是局部变量不用:定义的变量是全局变量(不建议)  ......
  • go并发控制
    并发控制Golang基础库中已经提供不少并发控制工具,比如Channel、WaitGroup、各种锁等等。 ErrGroupWaitGroup可以等待多个Goroutine执行结束,但很多时候并发执行多个任......
  • SpringBoot 接口并发限制(Semaphore)
    可以使用JMeter辅助测试https://blog.csdn.net/weixin_45014379/article/details/124190381@RestController@RequestMapping({"/Test"})publicclasstest{L......
  • Pixhawk控制电机命令pwm源码详解
    在用USB转串口连接好飞控板之后,可以在终端使用命令pwm来进行设置pwm的输出值例如:命令nsh>pwmtest–c13–p1200该命令用来测试通道1和3,并将他们的输出值设定为1200us。p......
  • [C++11与并发编程]读写锁的简单实现
    读写锁的简单实现layout:posttitle:读写锁categories:cpp_concurrencydescription:C++并发编程简介keywords:c++,并发编程,读写锁​​boost共享锁实现​​​读写......
  • C语言第二课学习笔记--运算符,流程控制和函数
    <7>运算符1)分类:一些基本的运算符分类有:算术、关系、逻辑、赋值算术运算符有:+,-,*,/,%;    对于/被除数和除数都是int则结果是int,有一个是float结果就是float;对于%,被......
  • 深刻理解JAVA并发中的有序性问题和解决之道
    问题Java并发情况下总是会遇到各种意向不到的问题,比如下面的代码:intnum=0;booleanready=false;//线程1执行此方法publicvoidactor1(I_Resultr){if(rea......