当前位置: 首页 > news >正文

怎么创造自己的网站三明网站建设

怎么创造自己的网站,三明网站建设,网上在线做家教网站,网站建设丨找王科杰专业引言PHP7与PHP5版本相比有非常大的变化#xff0c;尤其是在Zend引擎方面。为了提升性能#xff0c;PHP7对Zend进行了深度优化#xff0c;使得PHP的运行速度大大提高#xff0c;比PHP5.0-5.6快了近5倍#xff0c;同时还降低了PHP对系统资源的占用。 PHP7比较大的变化有尤其是在Zend引擎方面。为了提升性能PHP7对Zend进行了深度优化使得PHP的运行速度大大提高比PHP5.0-5.6快了近5倍同时还降低了PHP对系统资源的占用。 PHP7比较大的变化有 抽象语法树PHP是一种解释性语言通过解析器来执行。 那么首先来看一下编译器与解释器的区别读入源语言后解释器和编译器都要进行词法分析、语法分析和语义分析之后二者开始有所分别。 解析器与编译器的区别 解释器在语义分析后选择了直接执行语句编译器在语义分析后选择将将语义存储成某一种中间语言之后通过不同的后端翻译成不同的机器语言可执行程序。其存在一个预编译的过程。如下图所示 PHP7之前的版本代码解释过程 PHP代码在语法解析阶段直接生成ZendVM指令即在zend_language_parser.y中直接生成opline指令使得编译器与执行器耦合在一起。编译生成的指令再供执行引擎使用该指令是在语法指令直接生成的若要更换执行引擎怎需要修改语法解析规则若PHP语法变化但没有修改执行引擎仍需要修改语法解析规则。其代码解析过程如下图 PHP7的代码解析过程 Native TLSPHP5.x版本扩展中有TSRM_CC、TSRM_DC宏用于线程安全。 PHP中有很多变量需要在不同函数间共享多线程的环境下不能简单地通过全局变量来实现为了适应线程的应用环境PHP提供了一个线程安全资源管理器将全局资源进行线程隔离不同的线程之间互不干扰。 使用全局资源需要先获取本线程的资源池这个过程比较占用时间因此PHP5.x通过参数传递的方式将本线程的资源池传递给其他函数避免重复查找。这种方式需要所有函数接受资源池的参数TSRM_DC宏所加的参数这些参数传递不仅易遗漏参数还是得代码不优雅。 PHP7使用Native TLS线程局部存储来保存线程的资源池简单来说就是通过__thread标识一个全局变量这样这个全局变量就是线程独享的了不同线程的修改不会相互影响。 指定函数参数、返回值类型输入和输出参数必须是指定的数据类型示例如下 123function foo(string $name): array { return [];}zval结构的变化Zval是PHP中最重要的数据结构之一另一个比较重要的数据结构是hash table它包含了PHP中的变量值和类型的相关信息。它是一个struct在PHP5.x中基本结构为 1234567struct _zval_struct { zvalue_value value; /* value变量的具体值 */ zend_uint refcount__gc; /* variable ref count记录变量的引用计数自动回收的基础 */ zend_uchar type; /* active type 类型*/ zend_uchar is_ref__gc; /* if it is a ref variable标识变量是否为引用 */};typedef struct _zval_struct zval;变量的实际值具体来说是一个zvalue_value的联合体union用来适配不同的变量类型: 12345678910typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ struct { /* string */ char *val; int len; } str; HashTable *ht; /* hash table value,used for array */ zend_object_value obj; /* object */} zvalue_value; 参考PHP内核探索之变量1变量的容器-Zval PHP5.x中引用计数是在zval中而不是在具体的value中这样一来导致变量复制时需要复制两个结构zvalzvalue_value始终是绑定在一起的。 变化1PHP7中将引用计数转移到具体的value中这样更合理因为zval只是变量的一个载体可以简单地认为是变量名而value才是真正的值这个改变使得PHP变量之间的复制、传递更加简洁、易懂。变化2zval结构的大小由24byte减少到16byte这PHP7能够降低系统的资源占用。异常处理PHP5.x中很多操作会直接抛出error错误PHP7中将多数错误改为了异常抛出这样就可以通过try catch捕捉到异常。这种新的异常处理方式使得错误处理更加可控。 HashTable的变化HashTable即哈希表也称为散列表它是PHP强大的array()类型的内部实现结构也是内核中使用非常频繁的一个结构函数符号表、类符号表、常量符号表等都是通过HashTable实现的。 PHP7中HashTable结构的大小由72byte减小到56byte同时数组元素Bucket结构也由72byte减小到32byte。 执行器execute_data、opline采用寄存器变量存储执行器的调度函数为execute_ex()这个函数复制执行PHP代码编译生成ZendVM指令。在执行期间会频繁地用到execute_data、opline两个变量。 PHP5.x中这两个变量是由execute_ex()通过参数传递给各指令handle的。 PHP7中不再采用传参的方式而是将execute_data、opline通过寄存器来存储避免传参导致的频繁出入栈操作同时寄存器相比于内存的访问速度更快。这个优化使得PHP的性能有了5%左右的提升。 新的参数解析PHP5.x通过zend_parse_parameters()解析函数的参数PHP7提供另外一种方式同时保留原来方式但是新的解析方式速度更快。 参考秦朋 《PHP7内核剖析》第1.3节 推荐文章——关于PHP内部实现的文章 给PHP开发者的PHP源码1源码结构理解 PHP 内部函数的定义PHP 的变量实现理解数组在PHP内部的实现
http://www.pierceye.com/news/113513/

相关文章:

  • 亚运村网站建设北京工商注册官网
  • sql2005做网站书店网站建设人员分配
  • 工商局网站怎么做股东实名认证石家庄网站建设公司怎么样
  • 做公众号的模版的网站国内网站做国外服务器
  • 做国际网站的上海高端网站公司wordpress 4.9.6 下载
  • 学校集约网站建设最牛餐饮营销手段
  • wordpress影视站网站太花哨
  • 青岛 机械 中企动力提供网站建设小说网站怎么做空间小
  • 通江县网站建设做网站到八方资源网怎么样
  • 国家网站建设ssh架构jsp网站开发
  • 浦东新区手机网站设计网络营销做得好的产品
  • 浙江市建设网站市场监督管理局电话举报电话
  • 企业网站的建设的功能定位菏泽百度推广公司电话
  • linux系统怎么做网站女生去住建局好不好
  • 自己搭建环境建设网站网站开发温州
  • 下沙做网站软件erp系统的主要功能
  • 郑州网站建设专家最新手机排行榜2021
  • 宠物店网站建设策划书重庆网站建设 红旗河沟
  • 一般网站自己可以做播放器吗最简单的一个网站开发
  • 网站的开发商务网站安全方案设计
  • 如何建立网站教材漳诈网站建设
  • 开家网站设计公司广州网站建设app开发
  • 建站服务公司网站源码成都游戏外包公司排名
  • 呼伦贝尔网站建设呼伦贝尔astro wordpress
  • 做网站需要好多钱专业制作广告字
  • 网站建设的需要是什么seo营销方案
  • 网站开发服务的协议wordpress自动翻译
  • 网站网站制作400多少钱wordpress 会员积分
  • 天津网站建设首选津坤科技做视频网站用什么好处
  • wordpress ffmpegsem seo是什么意思呢