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.
| 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.