zoukankan      html  css  js  c++  java
  • PHP7的变化

    PHP7对zend进行了深度的优化,使得PHP7的运行速度大大的提高,比PHP5.0~5.6快了近5倍,同时还降低了php对系统资源的占用

    下面说下PHP7比较大的几个变化:

    1、抽象语法树:之前的版本,PHP代码在语法解析阶段直接生成了zendVM,使得编译器和执行器耦合在一起,导致修改任意一方都会引起另一方的修改,php7增加了抽象语法树,首先将php代码解析生成了抽象语法树,然后将抽象语法树编译为zendVM指令,抽象语法树的加入使得PHP的编译器和执行器很好的隔离开,编译器不要咬关心指令的生成规则,然后执行器根据自己的规则将抽象语法树编译为对应的指令,执行器同样不需要关心该指令的语法规则是什么演绎。

    2、Native TLS:PHP提供了一个线程安全资源管理器,将全局资源进行了线程隔离,不同的线程之间互不干扰,使用全局资源需要先获取本线程的资源池,这个过程比较占用时间,实现方式使所有的的函数都需要加速接收资源池的参数,方式不优雅。PHP7中使用nvtive TLS(线程局部存储)来保存线程的资源池,简单的讲就是通过__thread标示一个全局变量,这样这个全局变量就是线程独享的了,不同线程的修改不会相互影响。

    3、指定函数参数、返回值类型:

       function foo(string $name): array{ return [];

       }

    这个函数的参数必须是字符串类型,返回值必须是数组类型,否则返回error错误

    4、zval结构的变化:是PHP的内部结构,zval中有个比较重要的成员refcount_gc,它记录变量的引用计数,引用计数是PHP中实现变量自动回收的基础,也就是记录变量有多少个地方使用的一种机制,PHP5.x引用计数是在zval中而不是具体的value中,导致变量复制的时候需要复制两个结构,PHP7中将引用计数转移到了具体的value中,这样更合理因为zval其实就是变量名而value才是真正的值。除此之外,zval的结构大小也是从24byte减少到了16byte,这是PHP7能够降低系统资源占用的一个优化点所在。

    5、异常处理:PHP5.x中很多操作会直接抛出error错误,PHP7将多数错误改成了异常抛出,这样一来就可以通过trycatch拿到,新的异常处理方式使错误处理更加可控。

    6、hashtable的变化:哈希表也称为散列表。它是PHP中强大的array()类型的内部实现机构,也是内核中使用频繁的一个结构,hashtable结构的大小从72byte减少到了56byte,同时数组元素bucket的机构也从72byte减少到了32byte

    7、执行器:在PHP7中不再采用传参数的方式,而是将execute_data、opline通过寄存器来进行存储,避免了传参导致的频繁出入栈操作,同时寄存器相比内存访问的速度更快,这个优化使得PHP的性能有了5%左右的提升。

    8、新的参数解析方式

                                                                                                                                                                          -------摘自《PHP内核剖析》

  • 相关阅读:
    Help Hanzo (素数筛+区间枚举)
    How to create and apply a patch with Git
    Assembly
    GNU C 内联汇编介绍
    Arch Linux sudo: PAM authentication error: Module is unknown [Solved!]
    关于 RTL8723BS 同时开启 STA/AP 模式
    单源最短路径算法——Dijkstra算法
    Altium Designer PCB制作入门实例
    I2C 总线协议
    TarJan 算法求解有向连通图强连通分量
  • 原文地址:https://www.cnblogs.com/weiluoyan/p/8831634.html
Copyright © 2011-2022 走看看