func (v *Vec) Push(w worker.BaseProcess) {
	select {
	case v.workers <- w:
	default:
		v.Lock()
		defer v.Unlock()
		for i := 0; i < len(v.workers); i++ {
			wrk := <-v.workers
			switch wrk.State().Value() {
			case worker.StateWorking, worker.StateReady:
				v.workers <- wrk
				continue
			default:
				if wrk != nil {
					_ = wrk.Kill()
				}
				v.workers <- w
				return
			}
		}
	}
}
Push is O(1) operation
In case of TTL and full channel O(n) worst case, where n is len of the channel
package channel
import (
	"context"
	"sync"
	"sync/atomic"
	"github.com/spiral/errors"
	"github.com/spiral/roadrunner/v2/worker"
)
type Vec struct {
	sync.RWMutex
	destroy uint64
	workers chan worker.BaseProcess
}
func NewVector(len uint64) *Vec {
	vec := &Vec{
		destroy: 0,
		workers: make(chan worker.BaseProcess, len),
	}
	return vec
}