var wg2 sync.WaitGroup
wg2.Add(nums) xc :=0
parallelNum := plt.MaxParallel
var waitCount int32 = 0 for i:=0;i<nums*lll;i=i+lll { begin: if i % 30 == 1 {
tools.L2 <- msg
} if i % 10 == 1 {
mm := fmt.Sprintf("子任务%v开始执行",i+1)
tools.L2 <- mm
} currentParallelNum := atomic.LoadInt32(&plt.currentParallel)
if i % 10 == 1 {
mm := fmt.Sprintf("当前任务数%v,最大并发数%v",currentParallelNum,parallelNum)
tools.L2 <- mm
} if currentParallelNum > parallelNum {
waitCount++
if waitCount > plt.MaxWaitCount { //等待超过一定次数后,就放开一次并行度
parallelNum = plt.MaxParallel2 mm := fmt.Sprintf("当前等待次数%v超过最大等待次数%v,开始将并行数从%v增加到%v",waitCount,plt.MaxWaitCount,plt.MaxParallel,plt.MaxParallel2)
waitCount = 0 //tools.LogLevelByConfigFile(mm,2)
//tools.LogTask(mm,2)
tools.L2 <- mm
}else {
if parallelNum != plt.MaxParallel {
parallelNum = plt.MaxParallel
}
} mm := fmt.Sprintf("当前并行度%v超过最大并行度%v,开始等待",currentParallelNum,parallelNum)
//tools.LogLevelByConfigFile(mm,2)
//tools.LogTask(mm,2)
tools.L2 <- mm
tools.SleepByMil(100)
tools.SleepByRandMil(3000*common.SleepInterval)
goto begin
} xc++
mm := fmt.Sprintf("第 %v 个协程开始运行",xc)
tools.L2 <- mm endIndex := i + lll
if endIndex > l {
endIndex = l
} lstNew := (*sourceDataList)[i:endIndex]
go func(lst *[]map[string]string,wg *sync.WaitGroup) {
for _,row := range *lst {
atomic.AddInt32(&plt.currentParallel,1)
rowMap(&row,&plt.CommonStruct) //每行数据该如何处理的函数
atomic.AddInt32(&plt.currentParallel,-1)
}
wg.Done()
}(&lstNew,&wg2) tools.SleepByMil(100)
}
wg2.Wait()

在for循环中加入一个时间等待,否则的话,GO会在瞬间启动上千个并发,可能会直接把程序打死;

tools.SleepByMil(100)

如果不加这个时间等待,代码中的超过指定并发数开始等待的控制,根据控制不住;

GO瞬间并发数控制的更多相关文章

  1. Linux Shell多进程并发以及并发数控制

    1. 基础知识准备 1.1. linux后台进程 Unix是一个多任务系统,允许多用户同时运行多个程序.shell的元字符&提供了在后台运行不需要键盘输入的程序的方法.输入命令后,其后紧跟&a ...

  2. Java并发工具类之并发数控制神器Semaphore

    Semaphore(信号量)使用来控制通知访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源. 我们可以这么理解Semaphore,比如一个厕所只有6个坑,同时只能满足6个人上厕所( ...

  3. Shell-使用mkfifo实现多任务并发及并发数控制

    以下为代码实现的一个模拟场景:3个生产者,在不断提供服务,处理需求,假设1s处理一个. 20个消费者,在不断消耗供给产品,提交需求,假设3s消耗一个. 情景分析:由于消费者的提交需求能力 和 生产者处 ...

  4. Lavavel5.5源代码 - 并发数控制

    app('redis')->connection('default')->funnel('key000') // 每个资源最大锁定10秒自动过期,只有60个资源(并发),在3秒内获取不到锁 ...

  5. Tomcat并发数优化,修改service.xml性能调优 增加最大并发连接数

    可以在控制台的启动信息里看见,默认状态下没有被打开nio配置,启动时的信息,如下: 2010-2-1 12:59:40 org.apache.coyote.http11.Http11Protocol ...

  6. 利用apache限制IP并发数和下载流量控制

    一,为什么要对IP并发数,下载流量进行控制 说正题之前,先给大家讲个故事,那是在2007年,我进了一家公司,当时我们正在给达芙妮做电子商务网,www.idaphne.com.从三月份开始做的吧,九月份 ...

  7. dubbo是如何控制并发数和限流的?

    ExecuteLimitFilter ExecuteLimitFilter ,在服务提供者,通过 的 "executes" 统一配置项开启: 表示每服务的每方法最大可并行执行请求数 ...

  8. 高并发实时弹幕系统 并发数一定是可以进行控制的 每个需要异步处理开启的 Goroutine(Go 协程)都必须预先创建好固定的个数,如果不提前进行控制,那么 Goroutine 就随时存在爆发的可能。

    小结: 1.内存优化1.一个消息一定只有一块内存使用 Job 聚合消息,Comet 指针引用. 2.一个用户的内存尽量放到栈上内存创建在对应的用户 Goroutine(Go 程)中. 3.内存由自己控 ...

  9. Python- redis缓存 可达到瞬间并发量10W+

    redis是什么? mysql是一个软件,帮助开发者对一台机器的硬盘进行操作. redis是一个软件,帮助开发者对一台机器的内存进行操作. redis缓存 可达到瞬间并发量10W+ 高并发架构系列:R ...

随机推荐

  1. Spring Cloud Gateway 整合阿里 Sentinel网关限流实战!

    大家好,我是不才陈某~ 这是<Spring Cloud 进阶>第八篇文章,往期文章如下: 五十五张图告诉你微服务的灵魂摆渡者Nacos究竟有多强? openFeign夺命连环9问,这谁受得 ...

  2. CSS 海盗船加载特效

    CSS 海盗船加载特效 <!DOCTYPE html> <html lang="en"> <head> <meta charset=

  3. 连接url

    celery broker redis with password broker_url = 'redis://user:password@redishost:6379/0' tooz zookeep ...

  4. 大爽Python入门教程 3-5 习题

    大爽Python入门公开课教案 点击查看教程总目录 1 求平方和 使用循环,计算列表所有项的平方和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, ...

  5. Import “google/api/annotations.proto“ was not found or had errors.问题;proto 中外部引入proto文件问题解决方案

    问题 在proto 中引入了一些其他 proto 文件的情况下会出现was not found or had errors.问题 在使用Kratos框架时proto文件引入import "g ...

  6. 菜鸡的Java笔记 第十四 String 类常用方法

    /*String 类常用方法    将所有String类的常用方法全部记下来,包括方法名称,参数作用以及类型    一个成熟的编程语言,除了它的语法非常完善之外,那么也需要提供有大量的开发类库     ...

  7. 如何看待 SAE 在2014 年 3 月 24 日发生的的大面积宕机事故?

    3 月 24 日晚间大约 23 点左右,新浪云 SAE 一处核心机柜掉电,导致 SAE 平台下大量应用无法正常访问,并在 10 小时后才陆续修复.这次事故暴露 SAE 的哪些缺陷?SAE 运维人员又是 ...

  8. [loj6498]农民

    对每一个节点用二元组$(p,v)$表示,其中$p$是其是父亲的左(0)还是右(1)儿子,$v$是其父亲的点权 $x$合法当且仅当:对于其到根路径上所有$(0,v)$都有$a_{x}<v$.$(1 ...

  9. Linux查看进程

    1.ps 有很多参数,不需要全部记住,只需要记住最有用的那些参数. unix风格的参数 比如:ps -ef查看系统上运行的所有进程 ps -l 会产生一个长格式的输出   >UID:启动这些进程 ...

  10. 解决sourceforge下载文件慢的方法

    Sourceforge是一些开源软件经常用到的网站,然而国内的网站一直不稳定,如今是可以访问,但是一直无法下载,或者是下载速度慢,导致下载中断 镜像源:http://sourceforge.mirro ...