func NewAdmissionController(parallelism uint) AdmissionController {
	return NewCustomAdmissionController(parallelism, DefaultM, DefaultN)
}
NewAdmissionController creates a new admission controller that will allow
`parallelism` units of execution through at one time.  This uses the default
parameters for the admission controller, and should work fine for most RPC-based services.
package admission_control
import (
	"sync"
	"time"
	"github.com/pkg/errors"
)
type AdmissionController interface {
	AdmitOne() *Ticket
	Release(t *Ticket)
	Admitted() uint64
	Capacity() uint64
	Resize(tickets uint64) uint64
	Stop()
}
type Ticket struct {
	AcquisitionElapsed time.Duration
	IssuedBy           AdmissionController
}
func (t *Ticket) Release() {
	if t != nil && t.IssuedBy != nil {
		t.IssuedBy.Release(t)
		t.IssuedBy = nil
	}
}