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.
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.
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.
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:
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:
- 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.
Read the full list of limitations.
- PHP ≥8.1
pcntl
extensionshmop
extension
- PHP ≥8.1 compiled with
--enable-zts
parallel
extensionshmop
extension (for Promises support)
composer require byjg/phpthread
flowchart TD
byjg/phpthread --> byjg/cache-engine
byjg/phpthread --> ext-posix
byjg/phpthread --> ext-pcntl
byjg/phpthread --> ext-pthreads*