PHPDaemon\Thread\Master::callMPM PHP Method

callMPM() protected method

protected callMPM ( ) : integer
return integer
    protected function callMPM()
    {
        $state = Daemon::getStateOfWorkers($this);
        if (isset(Daemon::$config->mpm->value) && is_callable($func = Daemon::$config->mpm->value)) {
            $func($this, $state);
        }
        $upToMinWorkers = Daemon::$config->minworkers->value - $state['alive'];
        $upToMaxWorkers = Daemon::$config->maxworkers->value - $state['alive'];
        $upToMinSpareWorkers = Daemon::$config->minspareworkers->value - $state['idle'];
        if ($upToMinSpareWorkers > $upToMaxWorkers) {
            $upToMinSpareWorkers = $upToMaxWorkers;
        }
        $n = max($upToMinSpareWorkers, $upToMinWorkers);
        if ($n > 0) {
            //Daemon::log('minspareworkers = '.Daemon::$config->minspareworkers->value);
            //Daemon::log('maxworkers = '.Daemon::$config->maxworkers->value);
            //Daemon::log('maxspareworkers = '.Daemon::$config->maxspareworkers->value);
            //Daemon::log(json_encode($state));
            //Daemon::log('upToMinSpareWorkers = ' . $upToMinSpareWorkers . '   upToMinWorkers = ' . $upToMinWorkers);
            Daemon::log('Spawning ' . $n . ' worker(s)');
            $this->spawnWorkers($n);
            return $n;
        }
        $a = ['default' => 0];
        if (Daemon::$config->maxspareworkers->value > 0) {
            // if MaxSpareWorkers enabled, we have to stop idle workers, keeping in mind the MinWorkers
            $a['downToMaxSpareWorkers'] = min($state['idle'] - Daemon::$config->maxspareworkers->value, $state['alive'] - Daemon::$config->minworkers->value);
        }
        $a['downToMaxWorkers'] = $state['alive'] - $state['reloading'] - Daemon::$config->maxworkers->value;
        $n = max($a);
        if ($n > 0) {
            //Daemon::log('down = ' . json_encode($a));
            //Daemon::log(json_encode($state));
            Daemon::log('Stopping ' . $n . ' worker(s)');
            $this->stopWorkers($n);
            return -$n;
        }
        return 0;
    }