php7.0优缺点_【PHP】php7新特性及其优化原理

PHP7新特性

php7.x增加的新特性介绍可以参考这里:

php7.x版本系列相比之前的php的版本提交性能提高了不少,下图是wordpress在不同php版本下的压力测试表现。

0c77f5230e52ec0ec5e63f7517e59997.png

f4f5b29a6662b11a4a74b87327ed9951.png

这里面其中的一些主要改变是性能提高的关键,主要有以下内容。

1.zval使用栈内存

在zend引擎和扩展中,经常要创建php变量,其底层就是一个zval指针,之前的php版本都是通过MAKE_STD_ZVAL动态的从堆内存上分配一个zval内存。而php7直接使用栈内存,好处是少了一次内存分配。php程序中回大量创建变量,所以php7会在栈上预分配一块内存来存放这些zval,来节省大量的内存分配和管理操作。

php5

zval *val ; MAKE_STD_ZVAL(val)

php7

zval val;

2.zend_string存储hash值,array查询不再需要重复计算hash

数组是php比较重要的数据结构,php程序中会有大量的array关联查询,虽然hashtable查找的复杂度是O(1),但是key的值每次要转化成一个hash值,需要用一个复杂的hash函数去计算的,这样就会占用cpu时间,不过不光数组,在php底层很多地方都会用到hashtable,比如类的属性方法函数等。其实php程序运行起来大部分key的值是不变的,所以php7就保存了这些hash值下次直接使用,那么php7就为字符串单独创建了新类型叫做zend_string,除了char*指针和长度之外,增加了一个hash字段,用于保存字符串的hash值,数据键值查找不再反复需要计算hash值。为了优化数组的键值查找。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值