nginx 找不到php进程,nginx - PHP的进程问题

有人说PHP单进程的,我理解的单进程就是同时只能处理一个文件如果并发需要排队,PHP到底是多个进程单进程的?

如果是单进程为什么会出现下面这些问题?

1.http://segmentfault.com/q/1010000002951092

2.http://segmentfault.com/q/1010000003975704

又提过一个这个贴子说多进程的

http://segmentfault.com/q/1010000002998618

回复内容:

有人说PHP单进程的,我理解的单进程就是同时只能处理一个文件如果并发需要排队,PHP到底是多个进程单进程的?

如果是单进程为什么会出现下面这些问题?

1.http://segmentfault.com/q/1010000002951092

2.http://segmentfault.com/q/1010000003975704

又提过一个这个贴子说多进程的

http://segmentfault.com/q/1010000002998618

拿PHP-FPM来说吧,PHP-FPM是一个多进程架构的服务,一个工作进程(子进程)在同一时刻只能处理一个请求,也就是说,如果你只开启了一个工作进程(pm.max_children = 1),这时来了2个请求,那么这2个请求是按时间先后被这个工作进程处理的。建议看看我总结的PHP FastCGI进程管理器PHP-FPM的架构, 利用PHP-FPM提供的池的隔离性,分离计算密集和I/O密集操作,减少阻塞对整个PHP应用的影响。

又比如Linux上2.4系列的Apache,默认的event MPM是一个多进程多线程epoll事件驱动的架构,PHP需要编译成线程安全(--enable-maintainer-zts)版本,才能跟Apache event MPM协作。这种情况下,Apache的工作进程(多个)里的线程(多个)会调用PHP解释器libphp5.so、libphp7.so处理请求,对于一个线程里的PHP解释器来说,在同一时刻只能处理一个请求,这点依旧是不变的。另外,Windows上Apache的winnt MPM也是一个多线程(不过是单进程)架构,PHP工作原理类似。

至于命令行里的PHP,如果你使用了swoole扩展,因为swoole自身就提供了一套多进程多线程事件驱动的架构,这时就是多线程的。如果编程者调用了pthreads扩展,这时也是一个多线程程序。如果调用了pcntl扩展,则是一个多进程程序。否则正常情况下,就是一个单进程的程序。

单独的PHP程序是单进程的,也正如你说的同时只能处理一个请求,其他请求要排队。正因如此,服务器软件(如Apache等)为了保证并发,会开起多个PHP进程同时处理请求。FastCGI php-fpm也是开始多个php进程来处理请求的。

另外,在IIS等服务器软件里,还有一种多线程PHP模式,通过开设线程的方法来并发处理请求。

具体来说是那种模型需要看使用的是哪个SAPI,比如说在Apache中,那么就可能使用多线程模型, 也可能使用多进程模型。而php-fpm使用的就是多进程模型。

转自:《深入理解php内核》

第八章 线程安全 » 第二节 线程,进程和并发

http://www.php-internals.com/book/?p=chapt08/08-02-thread-process-and-concurrent

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值