有些时候,你需要对一些脚本进行优化,以期跑的更快,在更短的时间内完成任务。PCNTL是一个不错的选择,它可以fork多个进程,来协同完成一个任务,理论上完成的时间将会和进程数成反比。
不过,PCNTL只能用于CLI模式下,不能用于Web服务器环境,否则可能会带来意料之外的错误,不推荐使用。
- 安装PCNTL扩展:
wget
tar -jxvf php-5.3.27.tar.bz2cd php-5.3.27/ext/pcntl/phpize && ./configure && make installecho "extension=pcntl.so" >> /application/php5.3.27/lib/php.inikill -USR2 `cat /var/run/php-fpm.pid`下载->解压->编译->添加扩展模块->重启php-fpm注意:线上web服务器中,PHP编译时已经集成该函数,不需要再单独添加,否则会报warning。
-
- 程序实例:程序流程在注释中已经比较详细的说明了,这里不再单独叙述。
- 执行结果:从结果中可以看出来,虽然程序中fork子进程是有序的,但是在实际执行中并不一定是有序的,进程完成的顺序与进程开始的顺序也不是保持一致的。fork前,子进程可以继承父进程的东西,但是在pcntl_fork()后子进程和父进程就没有任何继承关系了。在子进程里创建的东西是子进程的,在父进程创建的东西是父进程的,可以完全看成是两个独立的进程。fork后,程序出了分岔,派生出了两个进程,具体哪个先运行,哪个先结束就看该系统的调度算法了。
- demo
-