古早语言PHP基础

怎么理解 "PHP是世界上最好的语言" ? 

能给你赚到米就是最好的语言, at that time!   at this time,  AI 当然是最好的. 

=====

生命周期:   

程序启动:   --->  模块初始化---> 初始化zend引擎,符号表, 哈希表 等核心数据结构; 加载ini配置的mysql,redis,curl...扩展 ; 初始化 SAPI接口钩子;

请求触发:  ----> 请求初始化----> 初始化当前请求的符号表 ; 加载ini配置的运行时参数 如 max_exec_time,memory_limit等 

加载脚本:  ----> 编译----> 词法分析,语法分析,编译为opcode ; 如果ini配置了opcache 则加速;

执行脚本:  ----> zend虚拟机逐条执行opcode;

请求关闭:  ----> 脚本执行完后, 执行 对象的~, gc, 记录日志

脚本结束:  ----> 进程退出时, 清理 zend 内存, 

=====

符号表: 每个作用域都有一个, 存储当前作用域的标量, 使用哈希表 

哈希表: hashtable , 用 hash + linklist 实现, 在超过0.75阈值时自动扩容, 扩容*2,重新创建并迁移是hash 的映射关系决定的,  默认8个元素,超过6个触发扩, 用mem_get_usage()两次计算内存;

GC: refcount 和 单色标记法,  单色标记用于解决循环引用的内存泄漏,触发gc -- 时,如果refcount>0 且对象符号表内部仍引用了其他对象, 丢到最大1w的双向链表 root buffer 里, 达到5k时触发扫描,不可达立即删除; 区别于go,java 的三色标,也不同于python,c#,java 的分代;

进程线程协程: php-fpm是fastcgi的一个实现,管理多进程,每个请求fork子进程处理; 区别于apache的worker 或 event 是多线程模型,  swoole 实现了协程调度器,在zend 脚本编译 和 脚本执行之间做了一层代理.  

弱类型: 根据上下文追踪当前类型,记录在 zval->type, 上下文就是赋值, 强制/隐形类型转换比  ; 空数组 php8以前=0,以后!=

=====

优化: opcache, 升级版本使用新版本的性能优化, 

=====

数组底层是hashtable,  foreach 用了迭代器, 且不需要维护索引越界, 比for 快点.

迭代器: yield 通过状态机暂停保存执行上下文, 让出cpu 直到下一次调用, 按需触发节省内存,适合流式计算, 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值