在看一条SQL语句查询如何执行,突然想到一段url输入到浏览器后,到返回数据经历了哪些过程。想做一个对比,加深印象。
流程
SQL语句查询流程
URL执行流程
- 浏览器发起请求
- DNS解析
- 建立链接(TPC三次握手,TLS 四次握手-HTTPS加密)
- 发送HTTP请求
- 维持HTTP链接
- 断开链接 (TCP四次挥手)
- 浏览器解析返回内容
PHP执行流程
- 语法分析 Scanning(类型),将PHP代码转换成语言片段(Tokens)。PHP 是基于re2c语法分析依据表作为语法分析的。在PHP源码文件夹中可以看到 zend/zend_language_scanner.1 这个规则文件。
- 语法分析 Parsing,将Tokens转换成简单有意义的表达式。Bison是一种通用目的的分析器和生成器。他将LARA(1)上下无关文法的描述转换成分析该文法的C语言程序。使用它可以生成解释器、编译器、协议实现等等。
- 编译 Complilation,将表达式编译成 opcodes
- 执行 Execution,zende 顺序执行 opcodes,每条一次,从而实现php脚本的功能。
代码的执行流程
- 可执行文件,存储在磁盘上
- 执行时,将可执行文件加载到内存
- CPU读取内存中需要操作数据
- CPU运算好的数据存在寄存器中
代码在内存中存取分为几个区?
- 代码区-存放二进制代码。
- 数据区-全局变量、静态变量、常量等。
- 栈区-运行的方法的形参、局部变量、返回值、以及递归栈锁需要的空间。系统自动分配和回收。
- 堆区-动态开辟的空间,存放new出来的对象在栈区中的真实数据需要手动回收。
基础知识要扎实,思考才会飞起来。 文章来源: