Core/src/Batch/InMemoryConfigStorage.php
public function submit($item, $idNum)
    {
        if (!$this->hasShutdownHookRegistered) {
            register_shutdown_function([$this, 'shutdown']);
            $this->hasShutdownHookRegistered = true;
        }
        if (!array_key_exists($idNum, $this->items)) {
            $this->items[$idNum] = [];
            $this->lastInvoked[$idNum] = $this->created;
        }
        $this->items[$idNum][] = $item;
        $job = $this->config->getJobFromIdNum($idNum);
        $batchSize = $job->getBatchSize();
        $period = $job->getCallPeriod();
        if ((count($this->items[$idNum]) >= $batchSize)
             || (count($this->items[$idNum]) !== 0
                 && microtime(true) > $this->lastInvoked[$idNum] + $period)) {
            $this->flush($idNum);
            $this->items[$idNum] = [];
            $this->lastInvoked[$idNum] = microtime(true);
        }
    }
public function submit($item, $idNum)
    {
        if (!$this->hasShutdownHookRegistered) {
            register_shutdown_function([$this, 'shutdown']);
            $this->hasShutdownHookRegistered = true;
        }
        if (!array_key_exists($idNum, $this->items)) {
            $this->items[$idNum] = [];
            $this->lastInvoked[$idNum] = $this->created;
        }
        $this->items[$idNum][] = $item;
        $job = $this->config->getJobFromIdNum($idNum);
        $batchSize = $job->getBatchSize();
        $period = $job->getCallPeriod();
        if ((count($this->items[$idNum]) >= $batchSize)
             || (count($this->items[$idNum]) !== 0
                 && microtime(true) > $this->lastInvoked[$idNum] + $period)) {
            $this->flush($idNum);
            $this->items[$idNum] = [];
            $this->lastInvoked[$idNum] = microtime(true);
        }
    }
public function submit ( $ item , $ idNum ) { if ( ! $ this -> hasShutdownHookRegistered ) { register_shutdown_function ( [ $ this , 'shutdown' ] ) ; $ this -> hasShutdownHookRegistered = true ; } if ( ! array_key_exists ( $ idNum , $ this -> items ) ) { $ this -> items [ $ idNum ] = [ ] ; $ this -> lastInvoked [ $ idNum ] = $ this -> created ; } $ this -> items [ $ idNum ] [ ] = $ item ; $ job = $ this -> config -> getJobFromIdNum ( $ idNum ) ; $ batchSize = $ job -> getBatchSize ( ) ; $ period = $ job -> getCallPeriod ( ) ; if ( ( count ( $ this -> items [ $ idNum ] ) >= $ batchSize ) || ( count ( $ this -> items [ $ idNum ] ) !== 0 && microtime ( true ) > $ this -> lastInvoked [ $ idNum ] + $ period ) ) { $ this -> flush ( $ idNum ) ; $ this -> items [ $ idNum ] = [ ] ; $ this -> lastInvoked [ $ idNum ] = microtime ( true ) ; } }
Hold the items in memory and run the job in the same process when it
meets the condition.

We want to delay registering the shutdown function. The error
reporter also registers a shutdown function and the order matters.
{@see Google\ErrorReporting\Bootstrap::init()}
{@see http://php.net/manual/en/function.register-shutdown-function.php}

@param mixed $item An item to submit.
@param int $idNum A numeric id for the job.
@return void
Hold the items in memory and run the job in the same process when it meets the condition .