Skip to content
/ puddle Public
forked from jackc/puddle

Generic resource pool for Go

License

Notifications You must be signed in to change notification settings

henvic/puddle

This branch is 67 commits behind jackc/puddle:master.

Folders and files

NameName
Last commit message
Last commit date
Dec 26, 2018
Sep 11, 2021
Dec 26, 2018
Dec 27, 2018
Jun 8, 2019
Apr 9, 2019
Apr 9, 2019
Dec 26, 2018
Jan 26, 2020
Jan 26, 2020
Sep 21, 2021
Sep 21, 2021

Repository files navigation

Build Status

Puddle

Puddle is a tiny generic resource pool library for Go that uses the standard context library to signal cancellation of acquires. It is designed to contain the minimum functionality required for a resource pool. It can be used directly or it can be used as the base for a domain specific resource pool. For example, a database connection pool may use puddle internally and implement health checks and keep-alive behavior without needing to implement any concurrent code of its own.

Features

  • Acquire cancellation via context standard library
  • Statistics API for monitoring pool pressure
  • No dependencies outside of standard library
  • High performance
  • 100% test coverage

Example Usage

constructor := func(context.Context) (interface{}, error) {
  return net.Dial("tcp", "127.0.0.1:8080")
}
destructor := func(value interface{}) {
  value.(net.Conn).Close()
}
maxPoolSize := 10

pool := puddle.NewPool(constructor, destructor, maxPoolSize)

// Acquire resource from the pool.
res, err := pool.Acquire(context.Background())
if err != nil {
  // ...
}

// Use resource.
_, err = res.Value().(net.Conn).Write([]byte{1})
if err != nil {
  // ...
}

// Release when done.
res.Release()

License

MIT

About

Generic resource pool for Go

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 100.0%