Golang线程池gpool
背景
golang中使用并发要考虑很多问题,如控制并发量、等待Goroutine执行完毕等。
看下面一段代码:
var wg sync.WaitGroup
count := 10
wg.Add(count)
limitGoroutineCount := make(chan int,5)
for i:=0;i<count;i++{go func(a int){limitGoroutineCount <- 1if time.Now().Second()%4==0{wg.Done()<- limitGoroutineCountreturn}fmt.Println(a)wg.Done()<- limitGoroutineCount}(i)
}
wg.Wait()
其实真正的业务代码也就是:
for i:=0;i<count;i++{if time.Now().Second()%4==0{return}fmt.Println(a)
}
gpool简介
gpool能做到让开发人员专注业务,而不是满屏的并发相关的代码
gpool代码仓库:https://github.com/GuoFlight/gpool
导入gpool
import "github.com/GuoFlight/gpool"
example
//测试函数
func Test1(a int)int{return a
}
func main() {//得到进程池对象gp := gpool.NewDefault() //默认最大并发限制为10//将函数添加到线程池中for i:=0;i<1000;i++{err := gp.AddGoroutine(Test1,i)if err!=nil{fmt.Println(err)}}//执行线程池中的goroutine,默认会阻塞gp.Run()//得到结果,这里会乱序输出0到999for _,v1 := range gp.RetList{for _,v2 := range v1{fmt.Println(v2)}}
}
创建gpool对象
使用默认配置:
- 默认情况下,最大并发限制为10
- 默认情况下,执行Run方法会阻塞
gp := gpool.NewDefault()
自定义配置:
// 这里相当于gp := gpool.NewDefault()
// 参数1:最大并发数量
// 参数2:执行Run方法是否阻塞
gp := gpool.New(10,true)
那年,郭少在京城。
Golang线程池gpool相关推荐
- 关于线程池你不得不知道的一些设置
2019独角兽企业重金招聘Python工程师标准>>> 微信公众号「后端进阶」,专注后端技术分享:Java.Golang.WEB框架.分布式中间件.服务治理等等. 老司机倾囊相授,带 ...
- 线程池 c linux 编程,关于c++:linux-c编程之高效线程池如何实现无琐化
大多数线程池实现都离不开锁的应用,如互斥量pthread_mutex*联合条件变量pthread_cond*.家喻户晓,锁的应用对于程序性能影响较大,尽管现有的pthread_mutex*在锁的申请与 ...
- 十、Go协程的调度,互斥锁,计数器和线程池
@Author:Runsen 在字节面试中,我见过:GO语言中的协程与Python中的协程的区别?其实就是要我讲解Go中GMP机制.我表示很多都用过,但是底层不了解. 那时我只知道与传统的系统级线程和 ...
- Golang 连接池的几种实现案例
因为TCP的三只握手等等原因,建立一个连接是一件成本比较高的行为.所以在一个需要多次与特定实体交互的程序中,就需要维持一个连接池,里面有可以复用的连接可供重复使用. 而维持一个连接池,最基本的要求就是 ...
- Golang连接池的几种实现案例
因为TCP的三次握手等等原因,建立一个连接是一件成本比较高的行为.所以在一个需要多次与特定实体交互的程序中,就需要维持一个连接池,里面有可以复用的连接可供重复使用. 而维持一个连接池,最基本的要求就是 ...
- 中fifo算法_java线程池,工作窃取算法
前言 在上一篇<java线程池,Executors阿里开发规范中为什么禁止使用Executors?>中我们谈及了线程池,同时又发现一个现象,当最大线程数还没有满的时候耗时的任务全部堆积给了 ...
- 500并发相当于多少人_linux开发技术之线程池accept处理高并发connect(含源码)
前言 服务器在调用listen和accept后,就会阻塞在accept函数上,accpet函数返回后循环调用accept函数等待客户的TCP连接. 我们知道服务器段listen套接字能处理的连接数与监 ...
- 如何设计一个实用的线程池?
原因排查 经过一个多小时的代码排查终于查明了线上程序线程数过多的原因:这是一个接收MQ消息的一个服务,程序大体思路是这样的,监听的线程每次收到一条消息,就启动一个线程去执行,每次启动的线程都是新的. ...
- 对警报线程池的警报线程_covid 19医院网络警报的警报可访问性剖析
对警报线程池的警报线程 Older adults (65 years and up) and individuals of any age with serious underlying medica ...
最新文章
- 不畏浮云遮望眼--离散数学和组合数学
- 11大Java开源中文分词器的使用方法和分词效果对比
- SAP RETAIL 通过分配表创建UB STO单据
- python打不开-python程序无法打开是怎么回事
- MyEclipse 7.5优化
- docker 镜像的使用和下载
- python for in循环_Python傻瓜教程:跟我学for循环
- mysql日期时间操作函数详解
- Matlab2018a安装成功后,打开出现licensing error:-8523
- 图像处理-空间域锐化滤波
- Java基础---数组内容详解
- php6 配置,thinkphp6如何配置环境变量
- 《深入理解OSGi:Equinox原理、应用与最佳实践》一3.4 事件监听
- Delphi插件创建、调试与使用应用程序扩展
- 光猫修改rms服务器地址大全,光猫服务器dns怎么设置教程
- css格式规范stylelint在vscode使用教程(ctrl+s自动智能修复)
- 计算机共享wf,电脑怎么共享wifi网络
- php测试页面打开速度,在JS中如何测试目标网站的打开响应速度
- linux临时文件放哪,如何保障Linux的临时文件安全?
- js改变html font size,JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)...
热门文章
- 高级变量类型 ------- 列表、元组、字典
- 经纬度换算数值_Excel中经纬度数据转换公式
- 深度学习——感知机:多层感知机(multi-layered perceptron)图文详解
- SpringBoot之RMI的简单使用
- python回测代码_python实现马丁策略回测3000只股票的实例代码
- 夏日炎炎玩转新加坡:盘点室内景点和夜游好去处
- 当个运营都难,二本生在如今的就业市场真的没出路了吗?
- 轻量化网络—ShuffleNet V1 V2理解
- 10000marker_为什么跑全基因组dna时为什么用10000bp的marker
- MFC程序的生死因果