byjg / phpthread
Polyfill Implementation of Threads in PHP. This class supports both FORK process and native Threads using ZTS compilation.
Installs: 26 747
Dependents: 0
Suggesters: 0
Security: 0
Stars: 6
Watchers: 5
Forks: 0
Open Issues: 1
Requires
- php: >=8.1 <8.4
- ext-pcntl: *
- ext-posix: *
- byjg/cache-engine: ^5.0
Requires (Dev)
- phpunit/phpunit: ^9.6
- vimeo/psalm: ^5.9
Suggests
- ext-pthreads: *
README
ByJG PHPThread simplifies working with threads and non-blocking code in PHP, bridging the gap for a language that was not inherently designed for threading.
Table of Contents
Overview
PHPThread is a polyfill library that abstracts threading functionality for PHP, providing a consistent interface regardless of the underlying PHP setup (ZTS or Fork). It empowers developers to implement thread-like behavior and asynchronous processing in PHP applications.
Why Threads in PHP?
PHP is traditionally designed for a request-response cycle, where scripts are executed only in response to client requests and terminate after sending a response. While efficient for web applications, this architecture lacks native threading support for background or concurrent tasks.
With PHPThread, you can overcome these limitations by leveraging:
- Forking (Default PHP) for simulating threading.
- Zend Thread Safety (ZTS) for true multi-threading environments.
How It Works
Default PHP (Non-ZTS)
In standard PHP installations (without ZTS), threading is simulated using the fork
command.
This approach creates a new process by cloning the parent process. While not a true thread,
this method can approximate threading behavior.
Requirements:
PHP ZTS (Zend Thread Safety)
With ZTS-enabled PHP, true multi-threading becomes possible. This setup is ideal for production environments where
robust threading is required. The ZTS version is compiled with the --enable-zts
flag, but it may not be included in
all PHP distributions.
Requirements:
Features
- Thread Management: Simplified thread creation and execution (docs).
- Thread Pools: Efficiently manage and reuse threads for multiple tasks (docs).
- Promises (Experimental): Asynchronous task management with a promise-like API (docs).
Supported Promise Methods:
then()
: Execute a callback on promise resolution.catch()
: Execute a callback on promise rejection.finally()
: Execute a callback after resolution or rejection.Promise::resolve()
: Resolve a promise.Promise::reject()
: Reject a promise.Promise::all()
: Wait for all promises to resolve.Promise::race()
: Wait for the first promise to resolve.
Limitations
Read the full list of limitations.
Installation
Requirements
Non-ZTS (Default PHP)
- PHP ≥8.1
pcntl
extensionshmop
extension
ZTS (Zend Thread Safety)
- PHP ≥8.1 compiled with
--enable-zts
parallel
extensionshmop
extension (for Promises support)
Install via Composer
composer require byjg/phpthread