Choosing a Concurrency Model

Most LAMP applications need none of this: FPM scales by adding workers, and queues remove slow work. Reach further when a measurement (Measuring Before Optimizing) shows independent waits in one request, long-lived connections, or a boot cost that dominates response time.

PHP concurrency options compared
Tool Model Status, Sep 2026 PHP 8.5 Use it for
curl_multi, Guzzle 23,452 Parallel HTTP in a request Core, stable Yes A few API calls
ReactPHP Event loop, promises event-loop 1.6.0 Yes Daemons, proxies
AMPHP Fibers on Revolt 932 3.1.3 Yes Async that reads as sync
Swoole 18,923 C++ coroutines, hooks 6.2.3 Since 6.2 High-concurrency servers
OpenSwoole Swoole fork 26.2.0 Since 26.2 Existing OpenSwoole code
FrankenPHP 912,500 Go and Caddy 7,400 , PHP threads 1.12.7 Embeds 8.5.10 Fast boot, one binary
RoadRunner Go, PHP process pool 2025.1.15 Yes, via CLI Workers, queues, gRPC
Queues, pcntl_fork Separate processes Mature Yes Slow or batch work

Prefer the smallest change that removes the measured wait.