SlideShare a Scribd company logo
PHP and Zend Internal I
    体系结构及生命周期



       夜沨@淘宝
Perface
• 研究内核不会一夜之间让你成为牛人
• PHP和Zend的源码并不是尽善尽美
• Not Only PHP
• 会谈方法论问题(例如何时何处适合使用
  PHP),不谈宗教问题(例如PHP和Lua哪
  个好),保持客观中立,我不是PHP布道
  者
• 干货,Talk Difference
Web编程断代史…
Web编程断代史…
• 静态页面时代

            GET /index.html HTTP/1.1 …

  Client                                 Web Server
            HTTP/1.1 200 OK …


                                                 本地I/O或socket




                                          Index.html
Web编程断代史…
• CGI时代

            GET /index.html?id=3 HTTP/1.1 …

   Client                                      Web Server
            HTTP/1.1 200 OK …


                                                       CGI - fork & execve


                                     socket
                      Database                CGI Application
Web编程断代史…
• 动态脚本时代

             GET /index.html?id=3 HTTP/1.1 …

    Client                                     Web Server
             HTTP/1.1 200 OK …


                                                       CGI - fork & execve



 Database
                      ?                        CGI Interface
                                                Application
走近一步看PHP…
走近一步看PHP…
• PHP和Zend的体系结构




                     CGI Interface
                      Application
        PHP Core


       Zend Engine
走近一步看PHP…
• PHP和Zend的体系结构

          PHP
             SAPI


           PHP Core


          Zend Engine
走近一步看PHP…
• PHP的执行流程
        SAPI                       PHP Core                 Zend Engine
  Startup
            Set HTTP Environment

            Start PHP Core
                                        MINIT
                                        RINIT
                                        Start Zend Engine
                                                                  Compile

                                                                  Execute

                                        RSHUTDOWN
                                        MSHUTDOWN
Shutdown
接口模式及生命周期模式…
接口模式及生命周期模式…
• CGI的困局 – One Request One Process

               GET /index.html?id=3 HTTP/1.1 …

      Client                                     Web Server
               HTTP/1.1 200 OK …


                                                       CGI - fork & execve



   Database
                     PHP                            SAPI
接口模式及生命周期模式…
• 新的接口模式

Web Server Extension – Apache mod_php


FastCGI – FPM
接口模式及生命周期模式…
• CGI/CLI

             Process Startup
                MINIT
                 RINIT
                SCRIPT
             RSHUTDOWN
             MSHUTDOWN
            Process Shutdown
接口模式及生命周期模式…
• Single Process Multirequest
                   Process Startup
                       MINIT
                        RINIT
                       SCRIPT
                    RSHUTDOWN
                         …
                       RINIT
                      SCRIPT
                   RSHUTDOWN
                   MSHUTDOWN
                  Process Shutdown
接口模式及生命周期模式…
• Multiprocess
     Process Startup    Process Startup    Process Startup
         MINIT              MINIT              MINIT
          RINIT              RINIT              RINIT
         SCRIPT             SCRIPT             SCRIPT
      RSHUTDOWN          RSHUTDOWN          RSHUTDOWN
           …                  …                  …
         RINIT              RINIT              RINIT
        SCRIPT             SCRIPT             SCRIPT
     RSHUTDOWN          RSHUTDOWN          RSHUTDOWN
     MSHUTDOWN          MSHUTDOWN          MSHUTDOWN
    Process Shutdown   Process Shutdown   Process Shutdown
接口模式及生命周期模式…
• Multithreaded
                   Process Startup
                       MINIT
          RINIT         RINIT            RINIT
         SCRIPT        SCRIPT           SCRIPT
      RSHUTDOWN     RSHUTDOWN        RSHUTDOWN




                   MSHUTDOWN
                  Process Shutdown
What is Next?
•   线程安全模型(ZTS & TSRM)
•   内核类型系统及表环境
•   垃圾回收机制(GC)
•   SAPI结构分析
•   PHP扩展模块开发
•   与内核相关的优化
•   OpCode
•   ……
Thanks 

  Q&A

More Related Content

PPTX
Node js feat pegasus
PPTX
Node.js中间件 connect模块深入浅出
PDF
Ruby rails分享
PPTX
Coffee script
PDF
Deployment With Subversion - Lorna Mitchell
 
PPT
PDF
ezComponents - Derick Rethans
 
PPT
Web2 0slideshare
Node js feat pegasus
Node.js中间件 connect模块深入浅出
Ruby rails分享
Coffee script
Deployment With Subversion - Lorna Mitchell
 
ezComponents - Derick Rethans
 
Web2 0slideshare

Similar to PHP and Zend Internal I - 体系结构及生命周期 (20)

PPT
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
PPT
Html01
PDF
使用Big pipe提升浏览速度v2
PPTX
02.python.开发最佳实践
PDF
Nodejs & NAE
PPTX
http flood and mobile app
PPTX
Open cdn快速部署你的私有cdn集群
PDF
广告技术部自动化测试介绍.pdf
PDF
Lvs在大规模网络环境下的应用pukong
PPTX
Sdn 之旅 open suse_asia_summit_20151206
PDF
使用Big pipe提升浏览速度 wk_velocity
PDF
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
PDF
杜嵩 Arch summit2012 dusong@freewheel
PDF
使用Bigpipe提升浏览速度
PDF
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
PPTX
纵览Loadrunner核心功能
PPTX
前端性能优化&测试
PDF
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
PDF
Weibo lamp improvements
PDF
Internal php and gdb php core
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
Html01
使用Big pipe提升浏览速度v2
02.python.开发最佳实践
Nodejs & NAE
http flood and mobile app
Open cdn快速部署你的私有cdn集群
广告技术部自动化测试介绍.pdf
Lvs在大规模网络环境下的应用pukong
Sdn 之旅 open suse_asia_summit_20151206
使用Big pipe提升浏览速度 wk_velocity
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
杜嵩 Arch summit2012 dusong@freewheel
使用Bigpipe提升浏览速度
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
纵览Loadrunner核心功能
前端性能优化&测试
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
Weibo lamp improvements
Internal php and gdb php core
Ad

PHP and Zend Internal I - 体系结构及生命周期