想必你们都知道能够经过多进程或者多线程的方式实现异步。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();