# php多进程

php多进程是在开发业务逻辑层面,并行处理多个任务的一种开发方式,例如,需要给10万给会员发送邮件,每个邮件需要处理1秒,如果是一个进程处理,就得10万*1秒才能处理完,但是,如果开启多个进程同时处理,例如:10个进程,那只需要10万*1/10秒就能处理完成,缩短了10倍的时间

# 多进程的概念

前面有讲到,多进程主要是在开发业务逻辑层面,并行处理多个任务的开发方式,什么叫做开发业务逻辑层面呢?
在上面我们有讲到,php-fpm是fast-cgi的进程管理器,启动之后会启动多个fast-cgi进程,等待任务处理

在php-fpm软件层面,fast-cgi的多个进程就属于多进程处理,但是,当用户发起请求,由nginx交给php-fpm处理请求时,在这个层面,每个请求其实只占有一个php fast-cgi进程进行处理逻辑,对于运行业务逻辑的这个php进程,其实是单进程的.

同理,当我们直接运行一个php文件时,默认是只开启了一个php进程进行运行php的代码

# 多进程的开发场景

在传统web模式下,php一向是单进程处理业务逻辑,只有在php-cli模式下,用于处理异步任务,作为网络服务器时,才可能用到多进程处理,所以,大部分phper都对php多进程的概念不熟悉

# 伪多进程

在上面讲到,在传统web下,一个请求就是一个进程,我们可以通过这个方法,实现理论上的多进程:

  • 在一个php文件中,写消费任务逻辑,比如给队列中的会员id发送邮件(注意超时,注意用户端关闭不终止脚本)
  • 用网页访问这个php文件,相当于开启了一个进程处理
  • 再开第二个网页访问这个文件,相当于又开启了一个进程
  • 如此重复,我们可以得到n个处理邮件的进程
  • 针对于消费任务逻辑层面,我们已经是开启了多进程在处理了