天涯论坛

 找回密码
 立即注册
搜索
查看: 18|回复: 0

浅析 PHP7 底层运行机制

[复制链接]

3026

主题

210

回帖

9777万

积分

论坛元老

Rank: 8Rank: 8

积分
97779024
发表于 2024-10-4 13:06:53 | 显示全部楼层 |阅读模式

微X公众号:PHP在线

PHP7 代码执行过程

PHP 是解释型语言,其执行过程需先编译成中间代码,再经由特定的虚拟机,翻译成特定的指令被执行。其执行过程如下:

PHP 代码 => Token => 抽象语法树 => Opcodes => 执行

各个过程内容如下:

源代码经过词法分析得到 Token

Token 是 PHP 代码被切割成的有道理的标识。PHP7 一共有 137 种 Token,在 zend_language_parser.h 文件中做了定义。

基于语法分析器将 Token 转换成抽象语法树(AST)

Token 便是一个个的词块,然则单独的词块不可表达完整的语义,还需要借助必定的规则进行组织串联。因此就需要语法分析器按照语法匹配 Token,将 Token 进行串联。语法分析器串联完 Token 后的产物便是抽象语法树(AST,Abstract Syntax Tree)。

AST 是 PHP7 版本的新特性,之前版本的 PHP 代码的执行过程中是生成 AST 这一步的。它的功效重点是实现了 PHP 编译器和解释器的解耦,提高了可守护性。

将语法树转换成 Opcode

需要将语法树转换成 Opcode,才可被引擎直接执行。

执行 Opcodes

opcodes 是 opcode 的集合形式,是 PHP 执行过程中的中间代码。PHP 工程优化办法中有一个比较平常的 “开启 opcache”,指的技术这儿将 opcodes 进行缓存。经过省去从源码到 opcode 的周期,引擎直接执行缓存好的 opacode,以提高性能。PHP7 内核架构

要把这张图印在脑海里

zend 引擎

词法 / 语法分析、AST 编译和 opcodes 的执行均在 Zend 引擎中实现。另外,PHP 的变量设计、内存管理、进程管理等在引擎层实现。

PHP 层

zend 引擎为 PHP 供给基本能力,而来自外边的交互则需要经过 PHP 层来处理。

SAPI

server API 的缩写,其中包括了场景的 cli SAPI 和 fpm SAPI。只要遵守定义好的 SAPI 协议,外边模块便可与 PHP 完成交互。

扩展部分

依据 zend 引擎供给的核心能力和接口规范,能够进行研发扩展。PHP 7 源码结构

php 7 的源码重点目录有:sapi 、Zend、main、ext 和 TSRM 这几个。

sapi 目录

sapi 目录是对输入和输出层的抽象,是 PHP 供给对外服务的规范。

几种常用的 SAPI:

1)apache2handler: Apache 扩展,编译后生成动态链接库,配置到 Apache 下。当有 http 请求到 Apache 时,按照配置会调用此动态链接库来执行 PHP 代码,完成与 PHP 的交互。

2)cgi-fcgi: 编译后生成支持 CGI 协议的可执行程序,webserver(如 NGINX)经过 CGI 协议把请求传给 CGI 进程,CGI 进程按照请求执行相应代码后将执行结果返回给 webserver。

3)fpm-fcgi: fpm 是 FastCGI 进程管理器。以 NGINX 服务器为例,当有请求发送到 NGINX 服务器,NGINX 根据 FastCGI 协议把请求交给 php-fpm 进程处理。

4)cli: PHP 的命令行交互接口

Zend 目录

Zend 目录是 PHP 的核心代码。PHP 中的内存管理,垃圾回收、进程管理、变量、数组实现等均在该目录的源码里。

main 目录

main 目录是 SAPI 层和 Zend 层的黏合剂。Zend 层实现了 PHP 脚本的编译和执行,sapi 层实现了输入和输出的抽象,main 目录则在它们中间起着承上启下的功效。承上,解析 SAPI 的请求,分析要执行的脚本文件和参数;启下,调用 zend 引擎之前,完成必要的模块初始化等工作。

ext 目录

ext 是 PHP 扩展关联的目录,常用的 array、str、pdo 等系列函数都在这儿定义。

TSRM

TSRM(Thread Safe Resource Manager)—— 线程安全资源管理器, 是用来保准资源共享的安全。

参考资料

《PHP7 底层设计与源码实现》





上一篇:PHP——底层运行机制与原理
下一篇:深入探讨 PHP 爬虫模拟捉捕工具:工作原理与应用场景
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-22 11:34 , Processed in 0.117294 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.