opcode cache与JIT的区别

要说明opcode cache与JIT的区别,得先明白,字节码,又叫中间码与机器码的区别。

机器码(machine code)

学名机器语言指令,有时也被称为原生码(Native Code),是电脑的CPU可直接解读的数据

机器码是电脑CPU直接读取运行的机器指令,运行速度最快,但是非常晦涩难懂,也比较难编写,一般从业人员接触不到。

而且机器码不支持跨平台,简单点将就是不同的CPU使用的机器码是不一样的。

字节码(bytecode)

是一种包含执行程序、由一序列 op 代码/数据对 组成的二进制文件字节码是一种中间码,它比机器码更抽象,需要直译器转译后才能成为机器码的中间代码。

字节码主要为了实现特定软件运行和软件环境、与硬件环境无关。字节码的实现方式是通过编译器和虚拟机器。编译器将源码编译成字节码,特定平台上的虚拟机器将字节码转译为可以直接执行的指令。字节码的典型应用为Java bytecode,那PHP的就是opcode。

字节码在运行时通过虚拟机(JAVA的JVM,PHP的Zend虚拟机)做一次转换, 生成机器指令, 因此能够更好的跨平台运行。

字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码。

通过介绍我们可以看到,CPU只能执行机器码,但为了实现应用跨硬件平台,我们就为不同的编程语言实现了一个虚拟机,而这个虚拟机将我们写的代码编译成二进制代码(文件),这个二进制代码就叫字节码,也叫中间码。Zend虚拟机编译好的字节码就叫opcode。

接下来咱们再介绍opcode cache与JIT。

JIT

目前PHP还没有引入JIT技术,不过鸟哥说z在下一个大版本的 PHP 可能带来JIT新特性。让我们拭目以待吧!不过JIT在JAVA生态中是很成熟的技术了,所以就通过JAVA来说明JIT。

JIT 是 just in time 的缩写, 也就是即时编译编译器。使用即时编译器技术,能够加速 Java 程序的执行速度。

通常通过 javac 将程序源代码编译,转换成 java 字节码,JVM 将字节码其翻译成对应的机器指令(机器码),逐条读入,逐条解释翻译。很显然,经过解释执行,其执行速度必然会比可执行的二进制字节码程序慢很多。为了提高执行速度,引入了 JIT 技术。

JIT 把翻译过的机器码保存起来,以备下次使用(这里面肯定有个类似与LRU的算法)。可见JIT要做的很简单,就是把中间码翻译成的机器码暂时(保存多久,怎么选择这里不做介绍)保存起来,这样再用到这个机器码的时候,就少了一次翻译。

opcode cache

光听名字就知道,就是将中间码opcode 缓存起来,引用官网的话:OPcache improves PHP performance by storing precompiled script bytecode in shared memory, thereby removing the need for PHP to load and parse scripts on each request.

那说说为什么需要opcode cache?

PHP代码的生命周期

从php解析器执行一个php脚本,到输出脚本内容,经历来如下五个步骤:

图1

Zend引擎读取文件,词法分析,语法分析与语义分析、创建要中间码,执行中间码。

每一次请求php脚本都会执行一遍以上步骤。如果php代码没有变化,那么opcode也不会变化,显然没有必要每次都生成opcode,于是我们可以把编译好的opcode缓存下来,以后如果php代码没有变,就直接访问缓存中编译好的opcode。启用Opcode缓存之后的流程图如下所示:

图2


总结

简单点描述JIT是用来缓存CPU执行的机器码的,opcode cache是用来缓存Zend虚拟机用的中间码的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,335评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,895评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,766评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,918评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,042评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,169评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,219评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,976评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,393评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,711评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,876评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,562评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,193评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,903评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,699评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,764评论 2 351