PHP 运行机制和 LNMP 架构

近了解了一下PHP基本运行原理和常用架构,这里整理出来方便回顾。

PHP的设计理念及特点

  • 多进程模型:由于PHP是多进程模型,不同请求间互不干涉,这样保证了一个请求挂掉不会对全盘服务造成影响,当然,随着时代发展,PHP也早已支持多线程模型。
  • 弱类型语言:和C/C++、Java、C#等语言不同,PHP是一门弱类型语言。一个变量的类型并不是一开始就确定不变,运行中才会确定并可能发生隐式或显式的类型转换,这种机制的灵活性在web开发中非常方便、高效。
  • 引擎(Zend)+组件(ext)的模式降低内部耦合。
  • 中间层(sapi)隔绝web server和PHP。
  • 语法简单灵活,但没有强制规范。(由社区发起的PSR规范可以了解下)

注:和Java Go进程模型对比

  • PHP 多进程 -> 单线程
  • Java 单进程 -> 多线程
  • Go 单进程 -> 多线程(cpu数量相等)-> goroutine

PHP的四层体系

PHP的核心架构如下图: php架构.jpg

PHP的执行流程&Opcode

php执行过程.png

拿到一段代码后,经过词法解析、语法解析等阶段后,源程序会被翻译成一个个指令(Opcode),然后ZEND虚拟机顺次执行这些指令完成操作。

常用LNMP架构

Nginx作为请求入口,对前后端流量进行分发,PHP文件通过fastcgi协议转发给PHP-FPM。

PHP-FPM:

先启动一个master进程,加载和解析PHP配置,具体请求分发到worker进程执行,worker进程是阻塞式的,完成一个请求才能接收下一个请求。 当请求并发较多时,所有worker进程都在running状态,就会出现504错误了。

常用LNMP架构如下图:

php-lnmp架构.jpg

参考内容:

updatedupdated2020-07-232020-07-23
Load Comments?