| 1.缘起 关于PHP,很多人的直观感觉是PHP是一种灵活的脚本语言,库类丰富,使用简单,安全,非常适合WEB开发,但性能低下。PHP的性能是否真的就 如同大家的感觉一样的差呢?本文就是围绕这么一个话题来进行探讨的。从源码、应用场景、基准性能、对比分析等几个方面深入分析PHP之性能问题,并通过真 实的数据来说话。 2.从原理分析PHP性能 从原理分析PHP的性能,主要从以下几个方面:内存管理、变量、函数、运行机制来进行分析。 2.1内存管理 类似Nginx的内存管理方式,PHP在内部也是基于内存池,并且引入内存池的生命周期概念。在内存池方面,PHP对PHP脚本和扩展的所有内存相关操作都进行了托管。对大内存和小内存的管理采用了不同的实现方式和优化,具体可以参考以下文档:https://wiki.php.net/internals/zend_mm。在内存分配和回收的生命周期内,PHP采用一次初始化申请+动态扩容+内存标识回收机制,并且在每次请求结束后直接对内存池进行重新mask。 2.2变量 总所周知,PHP是一种弱变量类型的语言,所以在PHP内部,所有的PHP变量都对应成一种类型Zval,其中具体定义如下: 图一PHP变量 在变量方面,PHP做了大量的优化工作,比如说Reference counting和copy on writer机制。这样能够保证内存使用上的优化,并且减少内存拷贝次数(请参考http://blog.xiuwz.com/2011/11/09 /php-using-internal-zval/)。在数组方面,PHP内部采用高效的hashtable来实现。 2.3函数 在PHP内部,所有的PHP函数都回转化成内部的一个函数指针。比如说扩展中函数
在内部展开后就会是一个函数
从这个角度来看,PHP函数在内部也是对应一个函数指针。 2.4运行机制 在话说PHP性能的时候,很多人都会说“C/C++是编译型,JAVA是半编译型,PHP是解释型”。也就是说PHP是先动态解析再代码运行的,所以从这个角度来看,PHP性能必然很差。 的确,从PHP脚本运行来输出,的确是一个动态解析再代码运行的过程。具体来说,PHP脚本的运行机制如下图所示: 图二 PHP运行机制 PHP的运行阶段也分成三个阶段:
所以说,在PHP内部,本身也是存在编译的过程。并且据此产生了大量的opcode cache工具,比如说apc、eacc、xcache等等。这些opcode cache在生产环境基本上在标配。基于opcode cache,能到做到“PHP脚本编译一次,多次运行”的效果。从这点上,PHP就和JAVA的半编译机制非常类似。 所以,从运行机制上来看,PHP的运行模式和JAVA是非常类似的,都是先产生中间码,然后运行在不同虚拟机上。 2.5动态运行 从上面的几个分析来看,PHP在内存管理、变量、函数、运行机制等几个方面都做了大量的工作,所以从原理来看,PHP不应该存在性能问题,性能至少也应该和Java比较接近。 这个时候就不得不谈PHP动态语言的特性所带来的性能问题了,由于PHP是动态运行时,所以所有的变量、函数、对象调用、作用域实现等等都是在执行 阶段中才确定的。这个从根本上决定了PHP性能中很难改变的一些东西:在C/C++等能够在静态编译阶段确定的变量、函数,在PHP中需要在动态运行中确 定,也就决定了PHP中间码不能直接运行而需要运行在Zend Engine上。 说到PHP变量的具体实现,又不得不说一个东西了:Hashtable。Hashtable可以说在PHP灵魂之一,在PHP内部广泛用到,包含变量符号栈、函数符号栈等等都是基于hashtable的。 以PHP变量为例来说明下PHP的动态运行特点,比如说代码: |
相关推荐
STM32无线遥控小车的设计
基于SPI通信的无线摇杆小车的设计
深度理解PHP执行流程
一、前言语言是人们进行沟通和交流的表达符号,每种语言都有专属于自己的符号,表达方式和规则。 就编程语言来说,它也是由特定的符号,特定的表达方式和规则组成。语言的作用是沟通,不管是自然语言,还是编程语言,它们的区别在于自然语言是人与人之间沟通的工具, 而编程语言是人与机器之间的沟通渠道。 就PHP语言来说,它也是一组符合一定规则的约定的指令。 在编程人员将自己的想法以php语言实现后,通过PHP...
昆仑通态,自由串口通讯
软件默认无该功能,需要问客服索要扩展包。
深度探讨 PHP 之性能
1.缘起 关于PHP,很多人的直观感觉是PHP是一种灵活的脚本语言,库类丰富,使用简单,安全,非常适合WEB开发,但性能低下。PHP的性能是否真的就 如同大家的感觉一样的差呢?本文就是围绕这么一个话题来进行探讨的。从源码、应用场景、基准性能、对比分析等几个方面深入分析PHP之性能问题,并通过真 实的数据来说话。 2.从原理分析PHP性能 从原理分析PHP的性能,主要从以下几个方面
Mac和VScode配置fortran
macOS系统 vscode fortran gfortran 终端
NS-3 和Aqua-sim-ng 学习笔记(一)
因为要搞水下网络,OMNET++不太合适,就转Aqua-sim。这是基于NS-2上的模型,NS-2需要额外学一门tcl脚本语言。 正好查到它的一个升级版Aqua-sim-NG,在github上,https://github.com/rmartin5/aqua-sim-ng是基于NS-3的,只需要基本的C++,不用学tcl语言。美滋滋。 装好ubuntu之后,安装NS-3和Aqu...
转载 深度探讨 PHP 之性能
为什么80%的码农都做不了架构师?>>> ...
自学 ABAP 和自学 SAP 的差别
有朋友在我的 ABAP 学习教程里留言: > 自学SAP是不是都要搭建虚拟服务器,然后自己去官网下载新版本SAP就可以吗 对于初学者,我们要搞清楚 ABAP 和 SAP 的区别。 ABAP 是一门编程语言,SAP 首先是德国软件公司的名称,也代表这家公司开发的一系列软件。SAP 公司开发的软件,我们有时也称产品,其功能能满足客户一个或者多个领域的业务需求。这些不同领域,我们也称为不同的业务模块,比如 ERP,CRM,SRM,HR 等等。
转载- 深度探讨PHP之性能
1.缘起 关于PHP,很多人的直观感觉是PHP是一种灵活的脚本语言,库类丰富,使用简单,安全,非常适合WEB开发,但性能低下。PHP的性能是否真的就如同大家的感觉一样的差呢?本文就是围绕这么一个话题来进行探讨的。从源码、应用场景、基准性能、对比分析等几个方面深入分析PHP之性能问题,并通过真实的数据来说话。 2.从原理分析PHP性能 从原理分析PHP的性能,主要从以下几个方面:内存管理、变量...
AUTOSAR OS Counter讲解
Counter(计数器)以tick为单位记录操作系统中发生了多少“事情”。tick(滴答)是一个抽象的单位。时间,例如毫秒,微妙,分钟等,然后计数器计算过去了多少时间旋转,例如以度或分钟为单位,计数器计算物体旋转了多少按钮按下,计数器计算按钮按下多少次错误,计数器计算错误发生的频次中断(有时是任务)用于驱动一个计数器。该驱动程序负责进行正确的OS API调用来滴答计数器,或者告诉OS计数器已经滴答到一个所需的值。
OTA 升级失败/回滚策略设计:打造安全可靠的双分区/断点续传/签名校验方案
双分区机制(A/B Partitioning)是OTA升级的“保险箱”。简单来说,设备存储分为两个分区:A分区(当前运行)和B分区(备用)。升级时,新固件写入B分区,A分区保持不变。如果升级成功,系统切换到B分区运行;如果失败,设备直接回滚到A分区,完全不受影响。这就像玩游戏存档:你打Boss前存了个档,万一挂了还能读档重来。双分区就是设备的“读档”机制,避免了变砖的尴尬。以Android设备为例,Google从Android 7.0开始强制引入A/B分区机制(Seamless Updates)。
PHP语言的深度学习
随着人工智能技术的迅猛发展,深度学习作为其中的一个重要分支,已经在图像识别、自然语言处理、语音识别等领域取得了显著的成果。然而,深度学习通常与Python、C++等编程语言紧密相关,而PHP作为一种广泛应用于Web开发的脚本语言,似乎与深度学习的关系并不密切。本文将探讨如何在PHP中实现深度学习,并分析其在实际应用中的潜力与挑战。
深度学习100例-卷积神经网络(CNN)彩色图片分类 | 第2天
文章目录前期工作设置GPU导入数据标准化可视化构建CNN网络编译训练模型预测模型评估 前期工作 设置GPU 如果使用的是CPU可以忽略这步 import tensorflow as tf gpus = tf.config.list_physical_devices("GPU") if gpus: gpu0 = gpus[0] #如果有多个GPU,仅使用第0个GPU tf.config.experimental.set_memory_growth(gpu0, True) #设置GPU显存用量
PHP中json_decode的最大嵌套深度是多少?(深度解析+实战测试)
掌握PHP json_decode 的深度限制,轻松应对深层JSON解析问题。本文详解默认嵌套深度、修改方法及实际应用场景,附实战测试代码。避免解析失败,提升程序稳定性,值得收藏。
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
深度解析PHP框架性能对比:Laravel、Symfony等框架特性与表现
在PHP的开发领域,框架的使用极为广泛,不同的框架有着不同的特性与性能表现。今天我就和大家来深度地探讨一下几个常见PHP框架的性能对比。首先我们来说说Laravel。Laravel是一个设计优雅的框架,它采用了很多现代化的设计模式,像是MVC(Model - View - Control)架构。
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
php 深度创建目录,构建无限类别深度的面包屑 – PHP SQL
我希望能够为内容页面构建面包屑,但是一段内容所包含的类别可以具有无限的深度,所以我不确定如何在不逐个获取每个类别的情况下再进行操作得到它的父母等似乎它可能是一个更简单的方式,但我无法弄明白.我有一篇文章表article_idarticle_namearticle_cat_id我也有一个类别表cat_idcat_namecat_parent猫父母是另一类别的id,其中一个类别是孩子.想象一篇文章有...
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
php实现收藏功能,[收藏]PHP函数的实现原理及性能分析
前言在任何语言中,函数都是最基本的组成单元。对于php的函数,它具有哪些特点?函数调用是怎么实现的?php函数的性能如何,有什么使用建议?本文将从原理出发进行分析结合实际的性能测试尝试对这些问题进行回答,在了解实现的同时更好的编写php程序。同时也会对一些常见的php函数进行介绍。php函数的分类在php中,横向划分的话,函数分为两大类: user function(内置函数) 和internal...



2933



被折叠的 条评论
为什么被折叠?



