php发展

注册

 

发新话题 回复该主题

90的PHP开发人员不知道秘密,看完之 [复制链接]

1#
白癜风个体化治疗方案 http://m.39.net/pf/a_4657300.html

很多PHPer对PHP的理解就是,PHP的是单线程的。

但在liunx环境下,PHP可以通过扩展实现多线程,来并发处理数据,扩展名称是:pcntl

$pid=pcntl_fork();//创建子进程if($pid==-1){die(‘couldnotfork’);//错误处理:创建子进程失败时返回-1.}elseif($pid){pcntl_wait($status,WNOHANG);

//父进程会得到子进程号,所以这里是父进程执行的逻辑//如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成://等待子进程中断,防止子进程成为僵尸进程。}else{exit(0);//子进程得到的$pid为0,所以这里是子进程执行的逻辑。}

从这样,可以看出来,父进程和子进程不是同步关系。父进程结束,子进程可以继续执行,父进程在等待子进程结束并回收。

这里的PHP-fpm都是fork出来的子进程,并且都是并行执行的。所以原本单线程需要23分钟执行的代码,这里fork出20个子进程,就可以把时间缩短到30秒

最后贴一下鸟哥所说的PHP多进程优点:

使用多进程,子进程结束以后,内核会负责回收资源使用多进程,子进程异常退出不会导致整个进程Thread退出.父进程还有机会重建流程.一个常驻主进程,只负责任务分发,逻辑更清楚.

在日志处理,数据同步等功能中,PHP多进程可以帮助你大大节省程序运行时间,就是有点吃内存。

分享 转发
TOP
发新话题 回复该主题