想必你們都知道能夠經過多進程或者多線程的方式實現異步。php
PHP多進程編程當前主要有這幾種方式:編程
用composer安裝。多線程
composer require jenner/simple_fork
simple_fork這個庫自帶了不少內容,在此主要跟你們分享進程和進程池的使用,其餘內容能夠自行查看demo。composer
沒有用過composer的朋友,須要根據本身的代碼路徑,導入autoload.php,在此略過。異步
須要在命令行下運行。ui
使用步驟大體以下:spa
用起來也很簡單命令行
use Jenner\SimpleFork\Runnable; use Jenner\SimpleFork\Process; class Task implements Runnable { /** * @return void */ public function run() { echo "I am a sub process" . PHP_EOL; } } $process = new Process(new Task()); $process->start(); $process->wait();
更多的時候,咱們會用進程池去異步執行一些列任務。線程
進程池在初始化的時候,須要聲名進程池的最大容量,超過該容量後新添加的進程都會放在隊列,直到有新的空餘空間釋放出來,纔會執行新增的任務。接口
一樣須要用wait等待進程池內的全部子進程執行完畢,避免出現殭屍進程。
use Jenner\SimpleFork\Runnable; use Jenner\SimpleFork\Process; use Jenner\SimpleFork\FixedPool; class Task implements Runnable { /** * @return mixed */ public function run() { sleep(10); echo getmypid() . ':done' . PHP_EOL; } } $pool = new FixedPool(2); $pool->execute(new Process(new Task())); $pool->execute(new Process(new Task())); $pool->execute(new Process(new Task())); $pool->wait();