PHP
1.应用场景
学习PHP底层实现原理, 提高对PHP的认识,对编程语言的认知, 站在更高维度下审视编程世界,互联网甚至未来.
2.学习/操作
环境希望能从不同平台上实践和学习
Windows10 64位 专业版
laravel 5.8 / 5.7
phpstudy v8.0
And
Mac pro 2019
Docker「LNMP」
PHP 版本后面说明
And
Linux
Docker「LNMP」
以及物理机搭建LNMP
1. 文档https://github/laruence/phpbook。// 鸟哥 - PHP底层实现 - 推荐 -- 20210429 周四 公司
PHP底层内核 - 知乎 -- 推荐学习
php为啥速度快?按说每次访问重新执行能快才怪? - 知乎 推荐阅读
PHP 运行机制与原理
从php内核角度分析php弱类型
全面解析PHP的糟糕设计(1)
全面解析PHP的糟糕设计(2)
php内核分析-zval
为什么Swoole可以加速php
安全|PHPStress:PHP拒绝服务攻击(含PoC)
PHP Opcache工作原理
如何发挥出PHP7的高性能
千万级并发实现的秘密:内核不是解决方案,而是问题所在!
PHP代码重构思考
专题1:PHP超时处理全面总结(3)
PHP 性能分析与实验——性能的宏观分析
萌新必备技能--PHP框架反序列化入门教程
PHP 安全更新|PHP 7.4.2 与 PHP 7.3.14,以及 PHP 7.2.27 正式发布
(1)PHP内核 - 玩转php的编译与执行
(2)PHP内核 - 玩转php的编译与执行
php - tcp 粘包/拆包实例
放弃偏见,重新认识 PHP
对PHP变量的实现方式以及内存管理的梳理
从php内核角度分析php弱类型
php底层原理之垃圾回收机制
PHP 迁移 Mcrypt 至 OpenSSL 加密算法详解
【鸟哥】PHP7强悍性能背后,zval的变化!
PHP内核— SAPI接口-php教程-PHP中文网
视频教程PHP7底层源码级开发实战_哔哩哔哩_bilibili
2. 整理输出 跟自己讲,看完上面的所有文档 2.1 引言 - 服务调用在单体应用中,所有服务都打包在一个应用里面,我们只需要通过本地方法即可调用其他的服务。
比如,我们有 UserService 和 ProductService 两个服务,如果要在 UserService 中获取某个用户发布的商品,只需要实例化 ProductService,并传入用户参数到到数据库查询并返回结果即可,一切操作都是在本地内存中完成的,不同服务之间的调用并不涉及到任何网络传输,编译器会帮我们完成所有的函数调用、参数解析和代码执行。
以 PHP 为例,底层的执行逻辑如下(如果你对服务不太理解的话,常见的 MVC 模式其实就是一种单体应用架构模式):
2.2 PHP的架构图 2.3 TBd 2.x 编写PHP扩展Zephir写PHP扩展(一) - 知乎
后续整理
...
3.问题/补充
1. php pcntl扩展的进程【sleep】➜ php top -l 0 -s 2 -stats pid,ppid,cpu,mem,command,state | grep php
76423 1 0.0 3238M phpstorm sleeping
66232 10116 0.0 9192K php sleeping
66228 86718 0.0 9532K php sleeping
66196 18300 0.0 9616K php sleeping
66168 902 0.0 18M php sleeping
76423 1 5.4 3238M phpstorm sleeping
66168 902 0.0 18M php sleeping
66228 86718 0.0 9532K php sleeping
66196 18300 0.0 9616K php sleeping
66232 10116 0.0 9192K php sleeping
98592 98582 0.0 504K+ php sleeping // 以下全是子进程
98591 98582 0.0 508K+ php sleeping
98590 98582 0.0 504K+ php sleeping
98589 98582 0.0 508K+ php sleeping
98588 98582 0.0 504K+ php sleeping
98587 98582 0.0 508K+ php sleeping
98586 98582 0.0 504K+ php sleeping
98585 98582 0.0 508K+ php sleeping
98584 98582 0.0 504K+ php sleeping
98583 98582 0.0 508K+ php sleeping
98582 97030 0.0 7504K+ php sleeping // 父进程
76423 1 2.9 3238M phpstorm sleeping
66232 10116 0.0 9192K php sleeping
66168 902 0.0 18M php sleeping
66228 86718 0.0 9532K php sleeping
66196 18300 0.0 9616K php sleeping
98592 98582 0.0 504K php sleeping
98591 98582 0.0 508K php sleeping
98590 98582 0.0 504K php sleeping
98589 98582 0.0 508K php sleeping
98588 98582 0.0 504K php sleeping
98587 98582 0.0 508K php sleeping
98586 98582 0.0 504K php sleeping
98585 98582 0.0 508K php sleeping
98584 98582 0.0 504K php sleeping
98583 98582 0.0 508K php sleeping
98582 97030 0.0 7504K php sleeping
76423 1 0.0 3238M phpstorm sleeping
66232 10116 0.0 9192K php sleeping
66196 18300 0.0 9616K php sleeping
66168 902 0.0 18M php sleeping
66228 86718 0.0 9532K php sleeping
76423 1 3.6 3238M phpstorm sleeping
66228 86718 0.0 9532K php sleeping
66196 18300 0.0 9616K php sleeping
66232 10116 0.0 9192K php sleeping
66168 902 0.0 18M php sleeping
^C
➜ php
demo.php
$childProcesses = array(); // 子进程 ID 的数组
for ($i = 0; $i < 10; $i++) { $pid = pcntl_fork(); // 创建子进程
if ($pid == -1) { // 创建子进程失败 die('无法创建子进程'); } elseif ($pid == 0) { // code logic // 在子进程中执行的代码 sleep(5); // 子进程睡眠 5 秒钟 exit(0); // 子进程直接退出 } else { // code logic // 在父进程中执行的代码 $childProcesses[] = $pid; // 记录子进程 ID } }
// 等待所有子进程结束后才退出 foreach ($childProcesses as $pid) { pcntl_waitpid($pid, $status); }
4.参考
参见文档阅读列表
后续补充
...
PHP - 底层/内核 - 学习/实践