zoukankan      html  css  js  c++  java
  • Zend Engine 简介

    相信很多人都听说过 Zend Engine 这个名词,也有很多人知道Zend Engine 就是 PHP语言的核心,但若要问一句:Zend Engine到底存在于何处?或者说,Zend Engine 究竟是在什么时候怎么发挥作用让PHP源码输出我们想要的东西的?这恐怕答出的人就不多了。当然,这也是这系列文章所要回答的问题。

    若要理解Zend Engine 的作用,就不能不理解为什么会出现,PHP为什么需要Zend Engine, Zend Engine 的出现为PHP解决了什么问题。切~,我发现我似乎又落入了一个俗套:写某项技术的文章必须把该技术可上推到祖宗八代而且都可以Google 到的历史再不厌其烦的说了一遍又一遍仿佛不如此就不能显得自己对这项技术有多么地了解就不能显示自己的话语在这项技术上的有多么的权威性一般。没办法,我自己也有一些虚荣心,更何况我还有“若不这样写读者就会觉得文章显得很突兀,仿佛技术是突然冒出的”这样冠冕堂皇的理由来搪塞自己。

    PHP发展到3.0版本的时候,此时PHP已经很普及了。“在 PHP 3.0 的顶峰,Internet 上 10% 的 web 服务器上都安装了它”,PHP Manual 如是说。广泛的应用必然带来更高的要求。但此时的PHP 3.0却有些力不从心了,这主要是因为PHP 3.0 采用的是边解释边执行的运行方式,运行效率很受其影响。其次,代码整体耦合度比较高,可扩展性也不够好,不利于应付各种各样需求。因此,此时在 PHP 界里已经有点中流砥柱作用的 Zeev Suraski 和 Andi Gutmans 决定重写代码以解决这两个问题。最终他们俩把该项技术的核心引擎命名为Zend Engine,Zend的意思即为Zeev + Andi 。

    Zend Engine 最主要的特性就是把 PHP 的边解释边执行的运行方式改为先进行预编译(Compile),然后再执行(Execute)。这两者的分开给PHP带来了革命性的变化:执行效率大幅提高;由于实行了功能分离,降低了模块间耦合度,可扩展性也大大增强。此时PHP已经能很方便的应付各种各样的BT需求了,而伴随 PHP 4.4.x ―可能是PHP4 系列的最后一个分支―的发布,PHP的大部分开发人员已经将注意力放在了PHP5或者 PHP6上面,以后发布的基本上就是一些 Bug Fix Release。可以说第一代的Zend Engine是已经在站最后一班岗了。

    2004年7月,PHP5发布,支持PHP5的是Zend Engine 2.0版本。这个版本主要是对PHP 的 OO功能进行了改进(我没有提集成 SQLite、PDO等特性是因为我们现在谈的主要是Zend Engine 而非 PHP)。核心执行方式(非OO部分)较PHP4 的1.0 版本变动不大,所以PHP5纯粹的执行速度相对于 PHP4 没有大的提高。而预计将于本月中旬发布的 PHP 5.1 版本则会携带Zend Engine 2.1版本,这个版本将提供新的执行方式,执行速度也会快上许多,至少要比PHP5.0相对于 PHP4.x 的差别要大很多,所以,PHP 5.1 将会是一个很了很令人期待的版本。

    但并非 PHP 5 系列的Zend Engine 2就完美无缺了。前面已经提到过,Zend Engine 将代码分成编译和执行两大部分。一般情况下,我们的代码完成以后就很少再去改变了。但执行时PHP却不得不还得一次又一次的重复编译,这根本就是毫无必要的。而且通常情况下,编译的所花费的时间并不比执行少多少,说是五五开并不为过,因此这极大的浪费了机器的CPU。基于Zend Engine 3.0 的 PHP6 将解决这个问题。除此之外,目前的PHP对多字节的字符处理也是PHP的一大致命缺陷。这在人们联系日益国际化的今天几乎是不可忍受的。而无数人在抨击 PHP 或 比较 ASP等同类语言时总是不可避免的要提到这一点。同时受到 IBM 方面的压力,PHP6 也将会把对多字节字符的处理提到首要日程。这在 PHP6 的 Dev 版本中已经得到体现。

    那么 PHP7 或者说 Zend Engine 4.0 会怎样?这个…… 汗……这个问题问得早了些吧。俺也不知道。俺只是目前对Zend Engine 4有些想法或者改进意见而已,这我可能会在以后有时间另行写一篇文章来YY一下。

  • 相关阅读:
    服务器重启后oracle监听无法打开
    Resport 四则运算
    For循环
    do...while循环
    Day03_Class01
    自学JavaDay02_class02
    自学JavaDay02_class01
    自学JavaDay01
    基本的Dos命令
    MarkDown语法
  • 原文地址:https://www.cnblogs.com/syf/p/2730343.html
Copyright © 2011-2022 走看看