手动前言:最近项目出现不固定时间段两分钟的504啊,上服务器调日志发现是MYSQL最大连接数问题,数据库是跟别的部门共享的,应该是有别的部门在跑数据,拉高了数据库服务器的CPU,额!有运维,DBA问我,你设置的PHP连接池多少,我说PHP对MYSQL没有连接池概念,但可以用第三方扩展可以做到,比如swoole,立马4-5张嘴说,怎么可能,JAVA都有,领导也说我,不可能吧,要不,你去查查资料!!!哎!最后我找了一些资料,发给各位爷,证明确定没有,他们才说,不好意思,我对PHP不太了解,对JAVA了解一点!!!
我又能说什么呢~~~各位爷开心就好~
一。如何理解php是弱类型语言
1.从变量角度:在声明一个变量不需要声明其类型,这事PHP的特色,因为他交给了底层
底层的变量存储是在一个zval结构里,声明一个变量会把所有类型都考虑到并开辟空间,同种类型默认用最大限度声明(int用long,float用double),这样绝对满足的所有变量的需求
2.从运算的角度:底层会根据你当前变量类型做转换并运算,并且返回结果做类型转换(string+string=int,float+string=float,sting('')==int0...);数组也可以加减参与运算;
(从存储结构理解php空,null,0'0'false:http://blog.csdn.net/ty_hf/article/details/70217267)
二。php生命周期:
主要分为3个阶段,开始阶段,运行阶段,结束阶段
开始阶段:
1.module_init: 初始化全局变量,引入standard标准库,加载php.ini。
启动apache就经历一次;加了dll或.so扩展,php.ini发生改变,重启nginx或apache的原因;
2.request_init:对全局变量赋值,激活zend引擎
运行阶段:
3.run:词法分析-语法分析-opcode
访问脚本,程序员们最熟悉的步骤了,你写的代码。
结束阶段:
4.request_shutdown:销毁使用的函数变量,回收内存
碰到die or exit自动进入此阶段并且调用析构方法 
5.module_shutdown:各模块最后一次释放内存
(PHP内核--生命周期:http://blog.csdn.net/ty_hf/article/details/52877759)
三。变量的分离改变
变量8种类型:int string array float bool null resource object
存储在zval_value(存储变量的值)zval_struct(存储变量的类型引用等)
写时分离:PHP在修改一个变量以前,会首先查看这个变量的refcount,如果refcount大于1,PHP就会执行一个分离的例程.【recount -=1】
写时改变:如果是一个引用的赋值,那会发生写实改变 【is_ref 由0->1】
(PHP内核的存储机制(分离/改变):http://blog.csdn.net/ty_hf/article/details/51057954)
四。内存与垃圾回收
内存:
 1.内存是一次性申请:在sapi周期request_init,向系统申请内存,ZendMM向系统进行的内存申请,并不是有需要时向系统即时申请, 而是由ZendMM的最底层(heap层)先向系统申请一大块的内存, 建立一个类似于内存池的管理机制。
 2.用完后不释放:在sapi运行阶段,及时unset变量内存也不马上释放,而是归还heap堆层,将内存复用,避免多次内存申请和释放所带来性能消耗。
 3.统一释放:在sapi周期request_shutdown阶段,统一销毁释放内存
 4.内存配置:在php.ini配置,memory_limit=32M
垃圾回收:
 1.php5.3以前,引用计数回收机制,变量都有recount的参数,当为0时判断无可用,回收。存在问题:内存泄漏怎么办
 2.php5.3以后,引用计数的基础上,加入了一个复杂的垃圾回收算法(不用了解),每发生一次内存泄漏可能操作时,记录到【根缓冲区】,到了10000执行一次算法,清理这里边的垃圾。
 3.效果:复杂的算法固然会有时间消耗,增加了6~7%,但是产生的回收机制节约可98.3%的内存,利大于弊。
(PHP内核--探究内存管理与缓存机制:http://blog.csdn.net/ty_hf/article/details/52905896)
(PHP内核--内存泄漏与新垃圾回收机制:http://blog.csdn.net/ty_hf/article/details/52906258)
五。命名空间:
作用:定义了不同的空间,解决了类,函数等名字的冲突
本质:比较简单,php底层会将 命名空间与定义函数名以\结合的形式展现,不就不重名了嘛
(PHP内核--命名空间:http://blog.csdn.net/ty_hf/article/details/52905209)

php作为弱语言是最棒的~哈哈哈哈相关推荐

  1. Python是强语言类型还是弱语言类型

    几句话了解python特性 Python 是强类型的动态脚本语言 好多人对python到底是强语言类型还是弱语言类型存在误解,其实,是否是强类型语言只需要一句话就可以判别, 强类型:不允许不同类型相加 ...

  2. 摇摇棒C语言程序,摇摇棒代码C语言.doc

    摇摇棒代码C语言 /**************************************************************************** * * ********* ...

  3. r语言liftchart_最棒的7种R语言数据可视化

    随着数据量不断增加,抛开可视化技术讲故事是不可能的.数据可视化是一门将数字转化为有用知识的艺术. R语言编程提供一套建立可视化和展现数据的内置函数和库,让你学习这门艺术.在可视化的技术实现之前,让我们 ...

  4. C语言,火柴棒等式。

    题目描述 给定n根火柴棒,可以拼出多少个形如"A+B=C"的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非0,则最高位不能是0).用火柴棍拼数字0~9的所需的火柴数如下: ...

  5. 在线作图|如何绘制一张好看的点棒图

    点棒图(棒棒糖图) 点棒图又叫棒棒糖图,用途跟条形图的用法类似,看起来更加美观一些,图表形式更加丰富. 如何不使用R语言绘制点棒图? 云图图网站可以画!(www.cloudtutu.com,免费的哦~ ...

  6. C#规范整理·语言要素

    如有不理解,请留言,开始! 1. 正确操作字符串 拼接字符串一定要考虑使用 StringBuilder ,默认长度为16,实际看情况设置. StringBuilder本质: 是以非托管方式分配内存. ...

  7. python是强定义语言吗_python是强类型语言吗

    强弱是对类型而言的. 强类型,你有一个值之后这个值是什么类型是确定,比如n='1',n的类型是确定的(字符串),因此你不能在Python做n='3' m=n+1运算.而弱类型就不是这样的,值的类型可以 ...

  8. c#语言规范所在文件夹,C#规范整理·语言要素

    如有不理解,请留言,开始! 1. 正确操作字符串 拼接字符串一定要考虑使用 StringBuilder ,默认长度为16,实际看情况设置. StringBuilder本质: 是以非托管方式分配内存. ...

  9. R语言是如何增强数据科学

    当今数据科学领域最流行的工具之一是开源编程语言R语言,它广泛的应用于各个领域.简单来说,R语言就是一种数据语言.过去的20年间,全世界的统计学家已经为开源语言R语言做出了许多创新性的贡献.这些贡献意味 ...

最新文章

  1. 如何用c语言打出 * * * * * * * * * * * * *?
  2. 开发程序实现nginx代理节点状态检查及WEB界面展示
  3. C++调用Matlab 注意事项
  4. SAP UI5 footerbar按钮高亮实现逻辑
  5. 软工实践项目课程的自我目标
  6. 浅谈nodejs中的Crypto模块
  7. 中国摊铺和混凝土浇筑设备市场趋势报告、技术动态创新及市场预测
  8. scale缩放中心_规范化(包含归一化)、标准化、中心化、BN、正则化的区别
  9. Anylogic学习--------------智能体(可用于复杂装备系统建模)
  10. Web前端课程的学习内容有哪些?
  11. C#/.NET 上位机快速入门1——界面渐变设计、实现无边框拖动、关闭的淡出效果、基于socket实现与PLC服务器通信
  12. 基于四叉树的图像压缩问题
  13. 大 学 十 年 励志
  14. Palantir的研究到金融风控(二)
  15. 计算机怎么看显卡内存容量,显存容量是什么,详细教您查看显卡容量大小方法...
  16. 工欲善其事必先利其器–SimpleTestBed
  17. python小操作——读取文件夹内的任意格式文件到txt并排序
  18. Java面向对象的主要特征
  19. svn 命令行创建分支、合并主干
  20. MeshLab 2022.02 源码编译教程

热门文章

  1. 查看mysql,apache,php,nginx编译参数
  2. 使用MySql保存session
  3. qt qml scrollbar 移动APP风格的滚动轴
  4. C#制作图片压缩工具
  5. 微信小程序 wx.request异步网络请求
  6. Python NumPy的使用
  7. Node.js 多版本安装方式
  8. 软件架构设计——解释器模式
  9. 20180104小测
  10. 我的问道游戏主题皮肤