PHP bounded round-robin worker pool
PHP
<?php
function run_pool(array $jobs, int $workers, callable $task): array
{
if ($workers < 1) throw new InvalidArgumentException('Workers must be at least 1');
$results = [];
$queue = $jobs;
while ($queue !== []) {
for ($worker = 0; $worker < $workers; $worker++) {
if ($queue === []) break;
$key = array_key_first($queue);
$job = $queue[$key];
unset($queue[$key]);
try {
$results[$key] = $task($job, $worker);
} catch (Throwable $e) {
$results[$key] = $e;
}
}
}
return $results;
}