初步探索PHP-1

  1. php的执行原理
    php底层是使用C编写的,使用Zend Engine执行代码。执行流程:ZE调用词法分析器去掉php代码的空格、注释,分割成一个个token(单元/标记),再调用语法分析器将这些token编译为一个个opcode(操作码/字节码),最后交给ZE执行这些opcode,输出结果。
  2. ZE
    ZE是PHP内核的核心部分,负责php代码的编译、解释与结果返回。php opcode是ZE虚拟机的指令。
  3. 什么是SAPI?
    SAPI就是Server Application Programming Interface(服务端应用编程接口)的缩写,其为外部应用提供了许多接口调用。
    在这里插入图片描述
  4. cgi与fast-cgi
    对于cgi来说,请求到达web服务器,web服务器会fork出一个子进程,在子进程中,将http请求通过标准输入、环境变量传递给url指定的cgi程序,由其执行程序,通过标准输出返回结果给子进程,再由子进程返回给客户端,最后销毁子进程。
    对于fast-cgi来说,请求到达web服务器,web服务器会通过fastcgi进程管理器调用早已启动的cgi解释器,通过 FastCGI 协议传递标准输入、环境变量,由其执行程序,通过标准输出、错误信息返回结果给web服务器,最后等待下一次请求。
    FastCGI 与传统 CGI 模式的区别之一则是 Web 服务器不是直接执行 CGI 程序了,而是通过 Socket 与 FastCGI 响应器(FastCGI 进程管理器)进行交互,也正是由于 FastCGI 进程管理器是基于 Socket 通信的,所以也是分布式的,Web 服务器可以和 CGI 响应器服务器分开部署。Web 服务器需要将数据 CGI/1.1 的规范封装在遵循 FastCGI 协议包中发送给 FastCGI 响应器程序。
  5. php中尤为关键的数据结构 - HashTable(哈希表)
    5.1 php中哈希表的时间复杂度为O(1),相当于y=1,不论哈希表中数据如何增加,获取数据的时间始终不变。(O(n)相当于y=x)
    5.2 基本概念
    键(key):php中的数组索引
    槽(slot/bucket):保存数据的地方
    哈希函数:将键映射到槽的index的算法
    哈希冲突:将两个不同的key映射到同一个槽的index上
    如何解决哈希冲突:链接法通过使用一个链表来保存slot值的方式来解决冲突,也就是当不同的key映射到一个槽中的时候使用链表来保存这些值。 所以使用链接法是在最坏的情况下,也就是所有的key都映射到同一个槽中了(相同的key会插入槽内的上一个元素,插入哈希表的下一个元素),这样哈希表就退化成了一个链表, 这样的话操作链表的时间复杂度则成了O(n),这样哈希表的性能优势就没有了, 所以选择一个合适的哈希函数是最为关键的。php使用链接法解决hash冲突。
  6. 参考
    6.1 PHP的底层执行原理和周期
    https://www.imooc.com/article/details/id/22937
    6.2 深入理解php内核
    http://www.php-internals.com/
    6.3 时间复杂度和空间复杂度
    https://blog.csdn.net/qiantujava/article/details/12898461
    6.4 PHP 内核中的 HASHTABLE 分析
    https://www.163100.com/php-hashtable-fenxi/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值