Phastlight\Module\Cluster\Cluster::fork PHP Method

fork() public method

public fork ( $workerClosure, $numOfWorkers )
    public function fork($workerClosure, $numOfWorkers)
    {
        if (is_callable($workerClosure)) {
            for ($i = 1; $i <= $numOfWorkers; $i++) {
                $childProcess = System::load("child_process")->fork();
                $pid = $childProcess->getPid();
                if ($pid == -1) {
                    $childProcess->emit("error", $pid);
                    exit;
                } else {
                    if ($pid > 0) {
                        //Successfully forked a worker process
                        $process = new ChildProcess($pid);
                        $this->workers[$pid] = new Worker($process);
                    } else {
                        if ($pid == 0) {
                            //we are now in the worker process
                            $pid = posix_getpid();
                            $process = new ChildProcess($pid);
                            $worker = new Worker($process);
                            $this->workers[$pid] = $worker;
                            //immediately record workers in the queue
                            call_user_func_array($workerClosure, array($worker));
                        }
                    }
                }
            }
        }
    }