1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Golang连接池

Golang连接池

时间:2020-12-13 09:36:05

相关推荐

Golang连接池

一.为什么需要Golang连接池

服务和服务之间的连接是开发过程中很常见的操作,为了服务解耦,减少相互依赖,增强系统稳定性,灵活性,所以会增加许许多多的服务通信链路,随着服务通信链路的增加,网络通信次数就会成倍的增长,那么随之而来的就是网络资源的消耗加剧,例如:带宽,连接数以及cpu,内存等。

每个连接建立时都会申请内存用来做socket buffer每个连接都要做三次握手四次挥手每个连接关闭时都要释放内存空间并发高时,会产生大量的连接,影响系统调度,会占用太多系统资源

二.连接池的实现流程

2.1 连接池的结构

空闲连接切片:freeConns []*Conn空闲连接的锁:lastDialErrorMu sync.RWMutex控制连接池大小的管道:queue chan struct{}

2.2 获取连接

验证连接池是否关闭。验证是否超过连接池的的最大连接数,没超过计数管道容量减少一个单位;如果超过了1秒后重试,直到重试时间超过最大等待时间则返回失败。没有超过连接池最大连接数,如果空闲连接切片中有连接,则判断获取到的连接是否超时;如果没有空闲连接则创建一个新连接,创建成功返回,创建失败则将之前技术管道容量减少的一个单位还原。

2.3 释放连接

如果连接失效,则把连接关闭,计数管道容量增加一个单位。如果连接没有失效,把连接放到空闲连接切片里,计数管道容量增加一个单位。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。