PHP7.0性能优化-学习笔记3
下一篇: PHP中不得不知的40个代码优化小技巧
相关推荐:
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
下一篇: PHP中不得不知的40个代码优化小技巧
3 Comments
互相支持,一起成长。
支持下,虽然我不懂,哈哈
挺难懂的。