func NewPool(id string, work WorkFunc, desiredWorkerCount WorkerCountFunc, sleepTime SleepTimeFunc, ctx context.Context) *Pool {
	p := new(Pool)
	p.id = id
	p.work = work
	p.workers = make([]poolWorker, 0)
	p.desiredWorkerCount = desiredWorkerCount
	p.sleepTime = sleepTime
	p.ctx = ctx
	p.ctx = context.WithValue(p.ctx, "poolId", p.id)
	p.monitorPoolSize = true
	return p
}
NewPool returns a new pool
package gopool
import (
	"sync"
	"context"
)
type WorkerCountFunc func() uint64