PHP7内核剖析之基础架构总结

原创 码农  2019-12-13 17:16:44  阅读 273 次 评论 0 条

PHP更新到PHP7版本后,性能有了极大的提升,目前php已经更新到php7.4版本了。小编最近看了【PHP7内核剖析】这本书,看完之后有点点感悟,在这里对每个章节做下总结,也是为了自己以后回顾知识点,也是为了给更多的读者提供一点儿思路。本人小白,后面各位如果看到哪里说的不对的地方,欢迎大家一起来指出问题,特此感谢!


PHP7内核剖析之基础架构总结 PHP7内核剖析之基础架构总结 架构

正文开始:


首先,PHP的基础架构我总结一下 


一.PHP7的改变

抽象语法树:在之前的版本中,PHP的解析器与执行器大部分是耦合在一起的。在PHP7的版本中,首相将PHP源码生成了抽象语法树,然后执行器负责执行生成的语法即可,大大降低了解析器与执行器的耦合度,为以后的扩展做了很大的便利性。

Native TLS:这块主要是讲了线程安全的问题。PHP中很多的变量需要在多个函数中使用,使用全局变量不能适用于多线程的情况,故PHP做了一个线程安全管理器,将全局资源进行了线程隔离,是的不同的线程之间不受影响。在PHP版本之前,这写资源是通过参数传递的形式实现的,这样的话,使得每走一步都需要传递大量的参数,第一数据太大,第二的话,容易丢失,不是很安全。PHP7版本将这块的资源做了一个线程局部存储来实现。具体就是使用了__thread标识一个全局变量,这样这个变量就是线程独享的了。

强类型的出现:我们知道,PHP一直都是弱类型,但是在PHP7版本中,实现了强类型,具体来说就是函数或者变量均可以指定类型,例如指定一个字符串变量 string $str。当然,强类型在PHP7版本中是可选的,就是说你可以去根据自己的需求选择是否声明它是强类型或者弱类型。

错误处理:PHP7版本将更多的错误信息用try catch的形式抛出,减少一些致命错误,使得程序可以更加可控。

zval结构的变化:PHP的变量在底层都是一个zval的struct结构体。在之前的版本中,ref_count的值是存放在struct的外部结构中的,PHP7是将ref_count存放在了value里面去,这样,我们可以理解为zval仅是一个变量名,value才是它真正的值。这个改变使得PHP的复制更加简洁,除此之外,zval的结构大小也从24byte减少到了16byte。

Hashtable的变化:主要是减少了结构大小。


二.PHP的构成

1. SAPI:应用接口层,主要是cli与fpm

2. main

3. zendVM:虚拟主机,类似于JVM

4. extesion:扩展,包括zend扩展与PHP扩展

5. TSRM:线程完全


三.PHP生命周期

1. 模块初始化

2. 请求初始化

3. 脚本执行

4. 请求关闭

5. 模块关闭


PHP 7使用了新的Zend Engine 3.0来改进应用程序性能,性能几乎是PHP 5.6的两倍,而内存消耗也提高了50%。PHP 7根据当前的工作负载设计和重构,它允许在不需要任何额外硬件的情况下为更多并发用户提供服务。


本文地址:https://www.itcodeit.com/post/12.html
版权声明:本文为原创文章,版权归 码农 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?