3

PHP7.0性能优化-学习笔记3

Posted by 撒得一地 on 2015年9月17日 in PHP笔记

相关推荐:
1.PHP7 NULL 合并运算符
2.PHP7 太空船运算符(组合比较符<=>)
3.PHP7 常量数组
4.PHP7 匿名类
更多:PHP7新特性教程

A. 在PHP7中,hashtable桶内直接存数据,减少了内存申请次数,提升了Cache命中率和内存访问速度。

旧版哈希表结构

图1-1旧版哈希表数据存储结构图

新版哈希表结构

图1-2PHP7中哈希表数据存储结构图

在以前的php中,hashtable存放的数据是在arBuckets这个结构体上,然后这个结构体存放了Bucket指针,这些Bucket指针对应的就是存放哈希表对应的数据。在php7里面对此做了改进,将之前的arBuckets改成了arData,arData与arBuckets的区别是arData直接就是一个大块内存。在这块内存里直接存放哈希桶,这样的好处是每次使用哈希桶,不用重新申请内存,在之前的arBuckets结构时,每次使用一次哈希桶,就要申请一次内存分配,每次申请都要消耗掉申请时间。而申请一块大内存不仅减少了内存申请次数,还提升了Cache命中率,因为在一个大块内存中,存储的数据是连续分配的。

B. zend_parse_parameters改为宏实现,性能提升5%。

zend_parse_parameters()函数作用是获取PHP函数调用者传递过来的参数,将其转化为C能够识别的参数类型。

if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,"za|b",&value,&array,&strict) == FAILURE){
return ;
}
ZEND_PARSE_PARAMETERS_START()
Z_PARAM_ZVAL(value)
Z_PARAM_ARRAY(array)
Z_PARAM_OPTIONAL
Z_PARAM_BOOL(strict)
ZEND_PARSE_PARAMETERS_END()

在php7里面,将zend_parse_parameters这个函数转化为宏,直接可以获得函数参数里面的类型和值。

C. 新增4种OPCODE,call_user_function,is_int/string/array,strlen,defined 4个函数变为PHP OpCode指令,速度更快。

D. 其他更多性能优化,如基础类型int,float,bool等改为直接进行值拷贝,排序算法改进,PCRE with JIT ,execute_data和opline使用全局寄存器,使用gdb4.8的PGO功能。

欢迎转载,转载请注明:http://coderschool.cn/420.html

标签:

上一篇:

下一篇:

相关推荐

3 Comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注

4 + 5 = ?

网站地图|XML地图

Copyright © 2015-2018 技术拉近你我! All rights reserved.
闽ICP备15015576号-1,版权所有©psz.