Server::$url]); $t = microtime(true); for ($i = 0; $i < $total; $i++) { $client->get('/guzzle-server/perf'); } $totalTime = microtime(true) - $t; $perRequest = ($totalTime / $total) * 1000; printf("Serial: %f (%f ms / request) %d total\n", $totalTime, $perRequest, $total); // Create a generator used to yield batches of requests $reqs = function () use ($client, $total) { for ($i = 0; $i < $total; $i++) { yield $client->createRequest('GET', '/guzzle-server/perf'); } }; $t = microtime(true); Pool::send($client, $reqs(), ['parallel' => $parallel]); $totalTime = microtime(true) - $t; $perRequest = ($totalTime / $total) * 1000; printf("Batch: %f (%f ms / request) %d total with %d in parallel\n", $totalTime, $perRequest, $total, $parallel); $adapter = new CurlMultiAdapter(['max_handles' => $parallel]); $client = new Client(['adapter' => $adapter, 'base_url' => Server::$url]); $t = microtime(true); for ($i = 0; $i < $total; $i++) { $client->get('/guzzle-server/perf'); } unset($client); $totalTime = microtime(true) - $t; $perRequest = ($totalTime / $total) * 1000; printf("Future: %f (%f ms / request) %d total\n", $totalTime, $perRequest, $total);