Amp is a non-blocking concurrency framework for PHP. It provides an event loop, promises and streams as a base for asynchronous programming.
Promises in combination with generators are used to build coroutines, which allow writing asynchronous code just like synchronous code, without any callbacks.
Traditionally, PHP has a synchronous execution flow, doing one thing at a time. If you query a database, you send the query and wait for the response from the database server in a blocking manner. Once you have the response, you can start doing the next thing.
Instead of sitting there and doing nothing while waiting, we could already send the next database query, or do an HTTP call to an API.
Making use of the time we usually spend on waiting for I/O can speed up the total execution time. The following diagram shows the execution flow with dependencies between the different tasks, once executed sequentially and once concurrently.
Amp allows such concurrent I/O operations while keeping the cognitive load low by avoiding callbacks.
Instead, the results of asynchronous operations can be awaited using
yield resulting in code which is structured like traditional blocking I/O code while the actual execution flow is handled by Amp.
This package can be installed as a Composer dependency.
composer require amphp/amp
This installs the basic building blocks for asynchronous applications in PHP. We offer a lot of repositories building on top of this repository, e.g.
amphp/byte-streamproviding a stream abstraction
amphp/socketproviding a socket layer for UDP and TCP including TLS
amphp/parallelproviding parallel processing to utilize multiple CPU cores and offload blocking operations
amphp/http-clientproviding an HTTP/1.1 and HTTP/2 client
amphp/http-serverproviding an HTTP/1.1 and HTTP/2 application server
amphp/postgresfor non-blocking database access
- and many more packages
This package requires PHP 7.0 or later. Many of the other packages raised their requirement to PHP 7.1. No extensions required!
Extensions are only needed if your app necessitates a high number of concurrent socket connections, usually this limit is configured up to 1024 file descriptors.
amphp/amp follows the semver semantic versioning specification like all other
Supported. We don't have plans to release v3, yet.
No longer supported. We stopped providing bug fixes 2017-12-31 and stopped providing security fixes 2018-12-31.
Compatible packages should use the
amphp topic on GitHub.
If you discover any security related issues, please email
firstname.lastname@example.org instead of using the issue tracker.
The MIT License (MIT). Please see
LICENSE for more information.