记录了解php8-JIT

news2024/11/24 16:30:36
## 1.JIT编译原理

1.1 JIT编译原理图
请添加图片描述
1.2 Zend Opcache作用

  • 1.检查opcodes是否缓存
  • 2.zend compiler编译器进行编译生成opcodes
  • 3.optimizer优化器生成优化后的opcodes
  • 4.把优化后的opcodes放入opcodes cache缓存
  • 5.经过zend vm虚拟机生成opcodes handlers处理程序
  • 6.送入x86 cpu架构进行执行

1.3 JIT编译原理

  • 1.检查opcodes是否缓存
  • 2.zend compiler编译器进行编译生成opcodes
  • 3.optimizer优化器生成优化后的opcodes
  • 4.把优化后的opcodes放入opcodes cache缓存
  • 5.jit编译器把optimized opcodes再次编译成汇编机器码machine codes
  • 6.进入zend vm虚拟前先检查是否开启jit引擎
  • 7.如果已经开启了jit引擎则直接读取机器码中的jit buffer代码片段
  • 8.送入x86 cpu架构进行执行

1.3 Opcache示意图的关键点

  • PHP8的JIT目前是在Opcache之中提供的
  • JIT在Opcache优化之后的基础上,结合Runtime的信息再次优化,直接生成机器码
  • JIT不是原来Opcache优化的替代,是增强
  • 目前PHP8只支持x86架构的CPU

2.Opcache和JIT功能开启

2.1:opcache配置

#php.ini
zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20200930/opcache.so
opcache.enable=1
opcache.enable_cli=1

2.2:jit配置

#php.ini
opcache.jit = 1205
opcache.jit_buffer_size = 64M

3.为什么要开启这个?

源代码(人认识)->字节码(解释器认识)->机器码(硬件认识)
1.来看下PHP的执行流程,假设有个a.php文件,不启用opacache的流程如下:
a.php->经过zend编译->opcode->PHP解释器->机器码
启用opacache的流程如下
a.php->查找opacache缓存,如果没有则进行zend编译为opcode并缓存->opacode->PHP解释器->机器码
2.启用jit的流程如下
a.php->编译->机器码
以后都只执行机器码,不编译,效率上高了很多

4.代码方面

1.命名参数

PHP 7
function test($name, $age='18', $sex='男') {
    echo $name . '-------' . $age . '--------'. $sex;
}
test('Landy', 20, '女'); //Landy-------20--------女
PHP 8
function test($name, $age='18', $sex='男') {
    echo $name . '-------' . $age . '--------'. $sex;
}
test('Landy', age: 20, sex: '女'); //Landy-------20--------女
---可以跳过参数
test('Landy', sex: '女'); //Landy-------20--------女
---参数的顺序可以不固定
test(age: 30, sex: '女', name: 'tom'); //tom-------30--------女

-------------------还可以这样
function test1($arg1,$arg2, ...$args) {
    print_r($args);
}
test1(1,2, name:'Landy', age:11, sex:2);
Array
(
    [name] => Landy
    [age] => 11
    [sex] => 2
)

2.match 表达式

PHP 7
switch (8.0) {
  case '8.0':
    $result = "Oh no!";
    break;
  case 8.0:
    $result = "This is what I expected";
    break;
}
echo $result;
//> Oh no!
PHP 8
echo match (8.0) {
  '8.0' => "Oh no!",
  8.0 => "This is what I expected",
};
//> This is what I expected

1.match 为表达式,意味着其结果可以存储在变量中或用于返回。
2.match 分支仅支持单行表达式,同时不需要 break; 语句。
3.match 使用严格比较。

//可以和表达式匹配
function test3() {
    return 8.0;
}
$a = 8.0;
$result = match($a) {
    test3() => '匹配函数',
    8.0 => '匹配8.0',
    '8.0' => 'test 8.0',
    9,10,11 => '多次匹配', //多次匹配
    default => '没有匹配值'
};  //匹配函数
echo $result



$input = "false";
$result = match($input) {
        "true" => 1,
};
//当input并不能被match中的所有条件满足的时候,match会抛出一个UnhandledMatchError exception:

3.构造函数里可直接定义属性

PHP 7
class Point {
  public float $x;
  public float $y;
  public float $z;

  public function __construct(
    float $x = 0.0,
    float $y = 0.0,
    float $z = 0.0
  ) {
    $this->x = $x;
    $this->y = $y;
    $this->z = $z;
  }
}
PHP 8
class Point {
  public function __construct(
    public float $x = 1.0,
    public float $y = 2.0,
    public float $z = 3.0,
  ) {}
}
echo (new Point())->x; // 1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/979270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录使用layui弹窗实现签名、签字

一、前言 本来项目使用的是OCX方式做签字的,因为项目需要转到国产化,不在支持OCX方式,需要使用前端进行签字操作 注:有啥问题看看文档,或者换着思路来,本文仅供参考! 二、使用组件 获取jSign…

优雅的代码命名规范,代码如诗

优雅的代码命名规范 管理类命名传播类命名回调类命名监控类命名内存管理类命名过滤检测类命名结构类命名常见设计模式命名解析类命名网络类命名CRUD命名其他END 日常编码中,代码的命名是个大的学问。能快速的看懂开源软件的代码结构和意图,也是一项必备的…

【数据结构】二叉搜索树——二叉搜索树的概念和介绍、二叉搜索树的简单实现、二叉搜索树的增删查改

文章目录 二叉搜索树1. 二叉搜索树的概念和介绍2. 二叉搜索树的简单实现2.1二叉搜索树的插入2.2二叉搜索树的查找2.3二叉搜索树的遍历2.4二叉搜索树的删除2.5完整代码和测试 二叉搜索树 1. 二叉搜索树的概念和介绍 二叉搜索树又称二叉排序树,它或者是一棵空树&…

机器学习入门教学——可解释性

1、前言 近年来,机器学习模型被广泛地应用到现实生活中的一些重要领域,如面部识别、自动驾驶、语言处理和智慧医疗等。然而,机器学习模型就像一个黑盒子,给予一个输入,就能得到一个决策结果,但是我们并不知…

使用ECS和RDS部署WordPress,搭建个人博客并使用域名访问

目录 一、准备工作 1、准备ECS服务器 2、创建数据库账号和密码 二、部署环境 1、远程连接 2、安装Apache服务 3、部署WordPress 三、对博客的优化并使用域名访问 1、博客的设计优化 1.1 插件的使用 1.2 博客的设计介绍 2、使用域名访问 四、个人博客部署的心得 1…

glibc2.35-通过tls_dtor_list劫持exit执行流程

前言 glibc2.35删除了malloc_hook、free_hook以及realloc_hook,通过劫持这三个hook函数执行system已经不可行了。 传统堆漏洞利用是利用任意地址写改上上述几个hook从而执行system,在移除之后则需要找到同样只需要修改某个地址值并且能够造成程序流劫持…

OpenCV的绘图函数,实力绘画篮球场

关键函数:cv2.line(),cv2.circle(),cv2.rectangle(),cv2.ellipse(),cv2.putText() 等。 绘制几何形状 import cv2 as cv import numpy as npcv.rectangle(),cv.circle(),cv.line()&#xff0c…

安全远控如何设置?揭秘ToDesk、TeamViewer 、向日葵安全远程防御大招

写在前面一、远程控制:安全性不可忽略二、远控软件安全设置实测◉ ToDesk◉ TeamViewer◉ 向日葵 三、远控安全的亮点功能四、个人总结与建议 写在前面 说到远程办公,相信大家都不陌生。远程工作是员工在家中或者其他非办公场所上班的一种工作模式&…

了解被测系统(二)接入链路--包括域名解析和Nginx代理

目录 一、接入链路示例 二、域名解析过程 1、相关概念 1.1、域的结构 1.2、DNS是什么? 1.3、DNS根域名服务器 1.4、顶级域名服务器 1.5、权威域名服务器 2、域名解析过程 2.1、检查Hosts文件 2.2、检查本地DNS缓存 2.3、DNS解析--本地DNS服务器 2.4、D…

基于yolov5模型的目标检测蒸馏(LD+KD)

文章目录 前言一、Distillation理解1、Knowlege distillation2、Feature distillation3、Location distillation4、其它蒸馏 二、yolov5蒸馏模型构建1、构建teacher预测模型2、构建蒸馏loss3、蒸馏模型代码图示模型初始化模型蒸馏 三、蒸馏模型实验1、工程数据测试2、voc2012开…

SpringMVC:从入门到精通,7篇系列篇带你全面掌握--二.SpringMVC常用注解及参数传递

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于SpringMVC的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.关于日志的了解 1.使用日志的好处…

ESD门禁管理系统的组成和主要功能

ESD门禁管理系统是一种用于实现企业或组织对出入口进行管理和控制的系统。ESD代表“电子门禁系统”,它利用先进的技术手段来确保只有授权人员可以进入特定区域,从而提高管理效率。 ESD门禁管理系统通常包括以下组件: 1. 门禁读卡器&#xf…

论文阅读《Robust Monocular Depth Estimation under Challenging Conditions》

论文地址:https://arxiv.org/pdf/2308.09711.pdf 源码地址:https://github.com/md4all/md4all 概述 现有SOTA的单目估计方法在理想的环境下能得到满意的结果,而在一些极端光照与天气的情况下往往会失效。针对模型在极端条件下的表现不佳问题&…

拓展世界 | “秀才”被封,千万粉丝一朝空,数字时代来临,大众情感寄托是否有新的出口?

近日,短视频千万粉丝博主“秀才”因违反平台相关规定被封,引起了不少网友的关注,网络上大家戏称他为“中年妇女收割机”,这次的封杀,网友开玩笑道“这得有多少阿姨伤心欲绝”。 在当今数字时代,网红主播已…

计算机领域期刊会议级别分类

文章目录 一、查询期刊1.1、知网1.2、letpub1.3、ccf 二、CCF2.1、CCF和SCI的区别2.2、国际学术期刊2.3、国内期刊2.4、国际会议2.5、国内会议 三、期刊会议总结 一、查询期刊 1.1、知网 查询中⽂期刊⼀般用知⽹,输入你想了解的期刊然后搜索,可以查看期…

Ab3d.DXEngine 6.0 Crack 2023

Ab3d.DXEngine 不是另一个游戏引擎(如Unity),它强迫您使用其游戏编辑器、其架构,并且需要许多技巧和窍门才能在标准 .Net 应用程序中使用。Ab3d.DXEngine 是一个新的渲染引擎,它是从头开始构建的,旨在用于标…

计算机视觉的应用13-基于SSD模型的城市道路积水识别的应用项目

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用13-基于SSD模型的城市道路积水识别的应用项目。今年第11号台风“海葵”后部云团的影响,福州地区的降雨量突破了历史极值,多出地方存在严重的积水。城市道路积水是造成交通拥…

关于ThreadPoolTaskExecutor线程池的配置

说明: 1、线程池分类、其他 1.1、分类 IO密集型 和 CPU密集型 任务的特点不同,因此针对不同类型的任务,选择不同类型的线程池可以获得更好的性能表现。 1.1. IO密集型任务 ​ IO密集型任务的特点是需要频繁读写磁盘、网络或者其他IO资源&a…

Netty—Channel

文章目录 一、Channel 是什么?🤔️二、 Channel 的继承体系👪三、Channel 的初始化过程 🔍首先,channel() 指定 ChannelFactory 类型其次,Channel 实例化 一、Channel 是什么?🤔️ …

初识Java 5-1 实现隐藏

目录 库单元:package 代码组织 独一无二的包名 Java访问权限修饰符 包访问权限 接口访问权限(public) 不可访问(private) 继承访问权限(protected) 包访问权限与公共构造器 接口与实现…