1
0
mirror of https://github.com/danog/amp.git synced 2024-11-30 04:29:08 +01:00
Go to file
2022-04-07 22:59:39 -05:00
.github/workflows Remove ext-fiber from github actions setup 2022-02-26 09:11:57 -06:00
docs Update deprecated method name to new name 2022-02-20 12:36:21 -06:00
examples Add cancellation example 2021-12-23 01:02:01 +01:00
src Add template tags to weakClosure() 2022-04-07 22:58:45 -05:00
test Update styles using new rules 2022-02-24 14:28:52 -06:00
.editorconfig Fix .editorconfig 2017-07-29 22:21:50 +02:00
.gitattributes Remove obsolete Travis config 2021-12-02 18:22:48 +01:00
.gitignore Remove Driver::run() and stop() 2020-09-26 12:50:30 -05:00
.gitmodules Update to new shared repository 2017-09-27 13:25:40 +02:00
.php-cs-fixer.dist.php Upgrade to php-cs-fixer v3 2022-02-01 20:30:04 +01:00
CHANGELOG.md Remove 1.x and 2.x from CHANGELOG 2021-12-02 23:16:14 +01:00
composer.json Require PHP 8.1 2022-02-24 14:23:10 -06:00
CONTRIBUTING.md Apply PSR-2 2018-06-18 20:00:01 +02:00
LICENSE Update LICENSE 2021-12-02 18:26:20 +01:00
phpunit.xml.dist Rename lib → src 2021-12-02 18:20:10 +01:00
psalm.xml Remove deprecated option from Psalm config 2022-04-07 22:59:39 -05:00
README.md Update README 2021-12-02 23:35:02 +01:00

Amp Logo

Amp

Amp is a set of seamlessly integrated concurrency libraries for PHP based on Revolt. This package provides futures and cancellations as a base for asynchronous programming.

Amp makes heavy use of fibers shipped with PHP 8.1 to write asynchronous code just like synchronous, blocking code. In contrast to earlier versions, there's no need for generator based coroutines or callbacks. Similar to threads, each fiber has its own call stack, but fibers are scheduled cooperatively by the event loop. Use Amp\async() to run things concurrently.

Motivation

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 Future::await() resulting in code which is structured like traditional blocking I/O code.

Installation

This package can be installed as a Composer dependency.

composer require amphp/amp

If you use this library, it's very likely you want to schedule events using Revolt's event loop, which you should require separately, even if it's automatically installed as a dependency.

composer require revolt/event-loop

These packages provide the basic building blocks for asynchronous applications in PHP. We offer a lot of repositories building on top of these repositories, e.g.

Documentation

Documentation can be found on amphp.org as well as in the ./docs directory. Each packages has it's own ./docs directory.

Requirements

This package requires PHP 8.0 (with ext-fiber), or PHP 8.1 or later. No extensions required!

Optional Extensions

Extensions are only needed if your app necessitates a high numbers of concurrent socket connections, usually this limit is configured up to 1024 file descriptors.

Versioning

amphp/amp follows the semver semantic versioning specification like all other amphp packages.

Compatible Packages

Compatible packages should use the amphp topic on GitHub.

Security

If you discover any security related issues, please email me@kelunik.com instead of using the issue tracker.

License

The MIT License (MIT). Please see LICENSE for more information.