您的位置:网站首页 > php源码 > 正文

php源码【问底】:深入PHP内核二——SAPI探究

类别:php源码 日期:2014-10-30 10:51:28 人气: 来源:

  第二阶段是请求初始化阶段(RINT),在模块初始化并激活后,会创建PHP运行,同时调用所有模块注册的RINT函数,调用每个扩展的请求初始化函数 ,设定特定的变量、分配资源或执行其他任务,如审核。

  PHP_RINIT_FUNCTION(memcached) { / 执行一些关于请求的初始化 / return SUCCESS; }

  第三阶段,请求处理完成后,会调用PHP_RSHUTDOWN_FUNCTION进行回收,这是每个扩展的请求关闭函数,执行最后的清理工作。Zend引擎执行清理过程、垃圾收集、对之前的请求期间用到的每个变量执行unset。请求完成可能是执行到脚本完成,也可能是调用die()或exit()函数完成

  第四阶段,当PHP生命周期结束时候,PHP_MSHUTDOWN_FUNCTION对模块进行回收处理,这是每个扩展的模块关闭函数,用于关闭自己的内核子系统。

  PHP_MSHUTDOWN_FUNCTION(memcached) { / 执行关于模块的工作 / UNREGISTER_INI_ENTRIES(); return SUCCESS; }

  1. CLI/CGI模式

  CLI和CGI都属于单进程模式,PHP的生命周期在一次请求中完成。也就是说每次执行PHP脚本,都会执行第二部分讲的四个INT和Shutdown事件。

  图2. CGI/CLI生命周期

  2. 多进程模式(Multiprocess)

  多进程模式可以将PHP内置到Web Server中,PHP可以编译成Apache下的prefork MPM模式和APXS模块,当Apache启动后,会fork很多子进程,每个子进程拥有自己的进程地址空间。

  图3. 多进程模式生命周期

  在一个子进程中,PHP的生命周期是调用MINT启动后,执行多次请求(RINT/RSHUTDOWN),在Apache关闭或进程结束后,才会调用MSHUTDOWN进行回收阶段。

  图4. 多进程的生命周期

  多进程模型中,每个子进程都是运行,没有代码和数据共享,因此一个子进程终止退出和重新生成,不会影响其他子进程的稳定。

  3. 多线程模式(Multithreaded)

  Apache2的Worker MPM采用了多线程模型,在一个进程下创建多个线程,在同一个进程地址空间执行。

  图5. 多线程生命周期

  4. FastCGI模式

  在我们用的Nginx+PHP-FPM用的就是FastCGI模式,Fastcgi是一种特殊的CGI模式,是一种常驻进程类型的CGI,运行后可以Fork多个进程,不用花费时间动态的Fork子进程,也不需要每次请求都调用MINT/MSHUTDOWN。PHP通过PHP-FPM来管理和调度FastCGI的进程池。Nginx和PHP-FPM通过本地的TCP Socket和Unix Socket 进行通信。

  图6. FastCGI模式生命周期

  PHP-FPM进程管理器自身初始化,启动多个CGI解释器进程等待来自Nginx的请求。当客户端请求达到PHP-FPM,管理器选择到一个CGI进程进行处理,Nginx将CGI变量和标准输入发送到一个PHP-CIG子进程。PHP-CGI子进程处理完成后,将标准输出和错误信息返回给Nginx,当PHP-CGI子进程关闭连接时,请求处理完成。PHP-CGI子进程等待着下一个连接。

  可以想象CGI的系统开销有多大。每一个Web 请求PHP都必须重新解析i、载入全部扩展并始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。另外,对于数据库和Memcache的持续连接可以工作。

  5. 内嵌模式(Embedded)

  Embed SAPI是一种特殊的SAPI,允许在C/C++语言中调用PHP提供的函数。这种SAPI和CLI模式一样,按照Module Init = Request Init = Request = Request Shutdown = Module Shutdown的模式运行。

  Embed SAPI可以调用PHP丰富的类库,也可以实现高级玩法,比如可以查看PHP的OPCODE(PHP执行的中间码,Zend引擎的指令,由PHP代码生成)。

  详细请见延伸内容:

关键词:php源码
0
0
0
0
0
0
0
0
下一篇:没有资料

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

CopyRight 2002-2012 技术支持 源码吧 FXT All Rights Reserved

赞助合作: