Less agressively evict idle workers from worker pool
This commit is contained in:
10
main.go
10
main.go
@@ -88,7 +88,8 @@ func main() {
|
|||||||
|
|
||||||
// reniced основная логика.
|
// reniced основная логика.
|
||||||
func reniced(cnf Config) {
|
func reniced(cnf Config) {
|
||||||
pool = pond.New(cnf.MaxWorkers, cnf.NbCapacity)
|
// Создаём пул со статическим количеством воркеров и длиной очереди неблокируемых задач, равной NbCapacity.
|
||||||
|
pool = pond.New(cnf.MaxWorkers, cnf.NbCapacity, pond.Strategy(pond.Lazy()))
|
||||||
|
|
||||||
for {
|
for {
|
||||||
processList, err := proc.Processes()
|
processList, err := proc.Processes()
|
||||||
@@ -102,7 +103,7 @@ func reniced(cnf Config) {
|
|||||||
ok := pool.TrySubmit(func() {
|
ok := pool.TrySubmit(func() {
|
||||||
if processName, err := p.Name(); err == nil {
|
if processName, err := p.Name(); err == nil {
|
||||||
if killSignal := kill[processName]; killSignal != 0 {
|
if killSignal := kill[processName]; killSignal != 0 {
|
||||||
switch killSignal {
|
switch killSignal { //nolint:exhaustive
|
||||||
case syscall.SIGSTOP:
|
case syscall.SIGSTOP:
|
||||||
_ = p.SendSignal(killSignal)
|
_ = p.SendSignal(killSignal)
|
||||||
|
|
||||||
@@ -177,7 +178,10 @@ func reniced(cnf Config) {
|
|||||||
|
|
||||||
time.Sleep(time.Millisecond * time.Duration(cnf.LoopDelay))
|
time.Sleep(time.Millisecond * time.Duration(cnf.LoopDelay))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
// Мы сюда никогда не попадём.
|
||||||
|
// pool.StopAndWait()
|
||||||
|
} //nolint:wsl
|
||||||
|
|
||||||
// sigHandler хэндлер сигналов. Работает на выходе приложения. Держит INT, TERM, QUIT.
|
// sigHandler хэндлер сигналов. Работает на выходе приложения. Держит INT, TERM, QUIT.
|
||||||
func sigHandler() {
|
func sigHandler() {
|
||||||
|
|||||||
Reference in New Issue
Block a user