private function spawnWorker()
{
$results = new SharedData();
$resultCodes = new SharedData();
$thread = new Thread($results, $resultCodes, $this->ipcUri);
if (!$thread->start()) {
throw new \RuntimeException('Worker thread failed to start');
}
$worker = new Worker();
$worker->id = $thread->getThreadId();
$worker->results = $results;
$worker->resultCodes = $resultCodes;
$worker->thread = $thread;
$this->pendingWorkers[$worker->id] = $worker;
$this->pendingWorkerCount++;
return $worker;
}