zeus / async
一个可以使用PHP异步运行对象的库
dev-main
2024-01-13 10:47 UTC
Requires
- ext-sysvsem: *
This package is auto-updated.
Last update: 2024-09-13 12:16:02 UTC
README
通过进程创建为PHP提供异步运行对象
通过composer安装
composer require zeus/async:dev-main
PHP测试代码
use Zeus\Async\AsyncProcess; use Zeus\Async\test\Sleep; require_once 'vendor/autoload.php'; $asyncProcess = new AsyncProcess(); $asyncProcess->add(new Sleep(2)); $asyncProcess->add(new Sleep(1)); $asyncProcess->add(new Sleep(2)); $asyncProcess->add(new Sleep(1)); $asyncProcess->add(new Sleep(3)); $asyncProcess->add(new Sleep(1)); $asyncProcess->add(new Sleep(2)); $asyncProcess->add(new Sleep(2)); $asyncProcess->add(new Sleep(1)); echo 'app started'; $asyncProcess->start(); echo 'app progressing'; $asyncProcess->wait(); echo 'app is finished';
同步
如果您想使某些对象同步运行,您可以通过Mutex对象来实现。
use Zeus\Async\AsyncProcess; use Zeus\Async\Mutex; use Zeus\Async\test\Sleep; use Zeus\Async\test\SleepSync; require_once 'vendor/autoload.php'; $mutex = new Mutex(); $asyncProcess = new AsyncProcess(7); $asyncProcess->add(new SleepSync($mutex, 2)); $asyncProcess->add(new Sleep(1)); $asyncProcess->add(new SleepSync($mutex, 2)); $asyncProcess->start(); $asyncProcess->wait();
Mutex
在关键事务中,一些操作可能需要等待某些操作,最好的例子是如果两个人同时尝试购买一张票,这将使其中一个人原子性地等待。
$mutex = new Mutex(); $mutex->lock(); //critic operations $mutex->unlock();