Golang-Pool 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Golang-Pool 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Golang-Pool 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Golang-Pool 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Golang-Pool 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 MIT
开发语言 Google Go 查看源码 »
操作系统 跨平台
软件类型 开源软件
开源组织
地区 国产
投 递 者 silenceper
适用人群 未知
收录时间 2016-11-25

软件简介

Golang 实现的连接池

功能:

  • 连接池中连接类型为interface{},使得更加通用

  • 链接的最大空闲时间,超时的链接将关闭丢弃,可避免空闲时链接自动失效问题

  • 使用channel处理池中的链接,高效

基本用法

//factory 创建连接的方法
factory := func() (interface{}, error) { return net.Dial("tcp", "127.0.0.1:4000") }

//close 关闭链接的方法
close := func(v interface{}) error { return v.(net.Conn).Close() }

//创建一个连接池: 初始化5,最大链接30
poolConfig := &pool.PoolConfig{
    InitialCap: 5,
    MaxCap:     30,
    Factory:    factory,
    Close:      close,
    //链接最大空闲时间,超过该时间的链接 将会关闭,可避免空闲时链接EOF,自动失效的问题
    IdleTimeout: 15 * time.Second,
}
p, err := pool.NewChannelPool(poolConfig)
if err != nil {
    fmt.Println("err=", err)
}

//从连接池中取得一个链接
v, err := p.Get()

//do something
//conn=v.(net.Conn)

//将链接放回连接池中
p.Put(v)

//释放连接池中的所有链接
p.Release()

//查看当前链接中的数量
current := p.Len()
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2014/05/21 19:14

pool

#include<stdlib.h> #include<stdio.h> typedef struct block{     size_t size;     int use;     struct block * next;     char * buf; }block_t; typedef struct head{     struct head * next;     block_t * block;    }head_t; typedef struct pool{    head_t * head; }pool_t; char * block_buf(size_t * size) {     int init = 16;     whi...

0
0
发表了博客
2016/12/28 21:14

common-pool

``` package com.berchina.util.rpc.demo.socket.pool2; import java.net.InetSocketAddress; import java.net.Socket; import org.apache.commons.pool.BasePoolableObjectFactory; import org.apache.commons.pool.impl.GenericObjectPool; import org.apache.commons.pool.impl.GenericObjectPool.Config; public class ConnectionPoolFactory { private GenericObjectPool pool; public ConnectionPoolFactory(Config confi...

0
0
发表于AI & 大数据专区
2014/06/05 21:54

About Pool Sizing

https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing

0
0
发表了博客
2018/09/12 00:00

Could not get a resource from the pool

异常描述: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool at redis.clients.util.Pool.getResource(Pool.java:22) at com.derbysoft.jredis.longkeytest.BorrowObject.run(BorrowObject.java:22) at java.lang.Thread.run(Thread.java:662) Caused by: java.util.NoSuchElementException: Timeout waiting for idle object at org.apache.commons.pool.impl.GenericObjec...

0
0
发表于开发技能专区
2019/09/16 18:19

我所理解的Sync Pool

看gin源码时发现了 sync.Pool的使用 // gin.go:L144 func New() *Engine { ... engine.pool.New = func() interface{} { return engine.allocateContext() } return engine } // gin.go: L346 func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) { c :=...

0
0
发表了博客
2014/10/30 10:12

Thread Pool

http://www.cnblogs.com/coser/archive/2012/03/10/2389264.html

0
2
发表于开发技能专区
2015/01/27 09:40

connection pool

Append [removeAbandoned="true"] property in [resource] [removeAbandonedTimeout ] 回收被遗忘的资源

0
0
发表于开发技能专区
2015/01/27 09:40

connection pool

Append [removeAbandoned="true"] property in [resource] [removeAbandonedTimeout ] 回收被遗忘的资源

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表于AI & 大数据专区
2019/03/20 11:25

golang mysql exec方法引起连接池不释放

此前发现golang mysql连接池无法释放,后定位了在rows.Next()循环中使用mysql exec函数将会引起rows.close无法释放链接,请问有遇到这个问题的吗? 今天专门写段测试代码,100%复现: func test() {   db := Kit.Mysql("dbname")   rows, err := db.Query("select uid,openid,wechat_id,nickname from test where 1 limit 5")   for rows.Next() {     var uid int     var openid string     var wechat_id string     var nickn...

2
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
0 评论
24 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部