原文链接

面试题解析

看你简历里也有用过 Go,Go 和 PHP 在运行的时候有什么区别和优势?

题主原回答:

PHP 每个请求进来时都会创建 fpm-worker 进程,从而导致系统并发高时 CPU 会产生频繁创建进程的开销,而 Go 不会。

解析回答:PHP 每个请求进来时都会创建 fpm-worker 进程

补充下,这里 php 请求进来就会 由 PHP - FPM(php-fpm 是 php-cgi 的进程管理器)创建一个 PHP-CGI 进程来准备响

应用户的请求。具体过程如图,大家也可以继续往下看详细解析。

解析回答:而 go 不会

golang 是先编译,后执行。 具体可以往下看详细解析。

php 运行原理

目前常见的 4 种 PHP 运行模式

CGI 通用网关接口模式

FAST-CGI 模式

CLI 命令行模式

模块模式

CGI 通用网关接口模式

每有一个用户请求,都会先要创建 cgi 的子进程,然后处理请求,处理完后结束这个子进程

cgi 是一种为了保证 web server 传递过来的数据是标准格式的通用网关接口协议

比较老,比较原始,大多已经不用了

FAST-CGI 模式

是 cgi 的升级版本,FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间

去 fork 一次,也是一种协议

FastCGI 的工作原理是:

(1)、Web Server 启动时载入 FastCGI 进程管理器【PHP 的 FastCGI 进程管理器是 PHP-FPM (php-FastCGI Process Manager)】(IIS ISAPI 或 Apache Module);

(2)、FastCGI 进程管理器自身初始化,启动多个 CGI 解释器进程 (在任务管理器中可见多个 php-cgi.exe) 并等待来自 Web Server 的连接。

(3)、当客户端请求到达 Web Server 时,FastCGI 进程管理器选择并连接到一个 CGI 解释器。Web server 将 CGI 环境变量和标准输入发送到 FastCGI 子进程 php-cgi。

(4)、FastCGI 子进程完成处理后将标准输出和错误信息从同一连接返回 Web Server。当 FastCGI 子进程关闭连接时,请求便告处理完成。FastCGI 子进程接着等待并处理来自 FastCGI 进程管理器(运行在 WebServer 中)的下一个连接。在正常的 CGI 模式中,php-cgi.exe 在此便退出了。

在 CGI 模式中,可以想象 CGI 通常有多慢。每一个 Web 请求 PHP 都必须重新解析 php.ini、重新载入全部 dll 扩展并重初始化全部数据结构。使用 FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接 (Persistent database connection) 可以工作。

CLI 命令行模式

一般使用调用脚本、查看 php 信息时会使用到该模式

php -r”phpinfo ();” |less 分页显示

模块模式

Apache + mod_php

lighttp + spawn-fcgi

nginx + PHP-FPM

运行原理

PHP-CGI:fast-cgi 是一种协议,而 php-cgi 是实现了这种协议的进程。不过这种实现比较烂。它是单进程的,一个进程处

理一个请求,处理结束后进程就销毁

PHP - FPM:是对 php-cgi 的改进版,它直接管理多个 php-cgi 进程 / 线程。也就是说,php-fpm 是 php-cgi 的进程管理器因此它也算是 fastcgi 协议的实现

php 的运行原理,就是在服务器启动时,自动载入 PHP-FPM 进程管理器,从而管理多个 PHP-CGI 进程来准备响应用户的

请求,如下图所示:

多个运行模式相当于超市的不同入口,运行原理就是进入超市后的固定的行走路线,通过不同的运行模式进入到底层(进入超市)

golang 运行原理

golang 是先编译为静态二进制可执行文件,再去运行。

看看 go run 与 go build 的区别

go run 的执行过程

创建了两个临时文件夹 b001 和 exe

先执行了 compile 命令,然后 link,生成了归档文件.a 和 最终可执行文件

最终的可执行文件放在 exe 文件夹里面。

命令的最后一步就是执行了可执行文件。

举个例子,生成的临时文件可以用 go run -work 看到,比如当前生成的临时文件夹是如下的路径:

localhost:hello ruby$ go run -work mytest.go

WORK=/var/folders/kt/nlhsnpgn6lgd_q16f8j83sbh0000gn/T/go-build593750496

HelloWorld

你好,Go!!!

localhost:hello ruby$

我们进入:/var/folders/kt/nlhsnpgn6lgd_q16f8j83sbh0000gn/T/go-build593750496 目录,可以看到如下目录结构:

可以看到,最终 go run 命令是生成了 2 个文件,一个是归档文件,一个是可执行文件。

go run 命令在第二次执行的时候,如果发现导入的代码包没有发生变化,那么 go run 不会再次编译这个导入的代码包。直接静态链接进来。

go build 的执行过程

go build 用于编译我们指定的源码文件或代码包以及它们的依赖包。但是注意如果用来编译非命令源码文件,即库源码文件,go build 执行完是不会产生任何结果的。这种情况下,go build 命令只是检查库源码文件的有效性,只会做检查性的编译,而不会输出任何结果文件。

go build 编译命令源码文件,则会在该命令的执行目录中生成一个可执行文件,上面的例子也印证了这个过程。

go build 后面不追加目录路径的话,它就把当前目录作为代码包并进行编译。go build 命令后面如果跟了代码包导入路径作为参数,那么该代码包及其依赖都会被编译。

go build 命令究竟做了些什么呢?我们可以执行 - n 这个命令来查看。 这里略过打印输出。

执行过程和 go run 大体相同,唯一不同的就是在最后一步,go run 是执行了可执行文件,但是 go build 命令,只是把库源码文件编译了一遍,然后把可执行文件移动到了当前目录的文件夹中。

总结一下如下图:

感谢关注

更多学习内容请访问:

gophp解释器_[2020年面试题-PHP 与 golang] .Go 和 PHP 在运行的时候有什么区别和优势...相关推荐

  1. gophp解释器_【干货】Gisp 解释器 Golang 辅助开发工具

    Gisp 是一个提供给 golang 使用的 Lisp 类 DSL 解释器.在 Lisp 的基本语法基础上,针对 go 环境稍作了一点语法糖.主要目标是提供一个尽可能便于与 golang 互操作的微型 ...

  2. gophp解释器_对比平台--Go和PHP之间的区别

    Go和PHP之间的区别 Go vs PHP是软件开发行业中的两种重要语言.Golang与PHP在本质上有一些相似之处,但在同一时间,Golang与PHP之间也存在许多差异.在这里,我们将对Go vs ...

  3. 2009.5.23软考_信息处理技术员 上午试题 答案 讨论

    2009.5.23软考_信息处理技术员 上午试题 答案 讨论 不求尽如人意,但求无愧我心.不断更新中,敬请持续关注-- 转载于:https://blog.51cto.com/296525818/160 ...

  4. python基础-PyCharm设置作者信息模板_修改解释器_设置软件UTF-8编码

    python基础-PyCharm设置作者信息模板_修改解释器_设置软件UTF-8编码 一.PyCharm 设置作者信息模板 1.File---Settings---在搜索框中搜索:File and C ...

  5. 2016电大计算机应用基础考试试题,(2016年电大)电大计算机应用基础考试_网考内容试题..doc...

    (2016年电大)电大计算机应用基础考试_网考内容试题. 电大考试资料.小抄,行考,形成性考核册,考试试题 1.一般认为,世界上第一台电子数字计算机诞生于______.1946年2.计算机当前已应用于 ...

  6. 2020年电力电缆试题及答案及电力电缆考试平台

    题库来源:安全生产模拟考试一点通公众号小程序 2020年电力电缆试题及答案及电力电缆考试平台,包含电力电缆试题及答案答案和解析及电力电缆考试平台练习.由安全生产模拟考试一点通公众号结合国家电力电缆考试 ...

  7. 国科大学习资料--VLSI测试与可测试设计--2020期末考试试题

    国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 一.概念 ...

  8. 计算机应用基础考试单选,计算机应用基础统考题库_计算机应用基础统考试题及答案(单选题)...

    计算机应用基础统考题库_计算机应用基础统考试题及答案(单选题) 1.世界上第一台电子数字计算机的诞生时间是(). A.1946年 B.1951年 C.1957年 D.1962年 答案:A 2.()体现 ...

  9. 2016年下半年信息系统项目管理师真题及答案_信息系统项目管理师历年真题及权威答案_信息系统项目管理师试题及模拟题_软考考试题库_希赛网...

    2016年下半年信息系统项目管理师真题及答案_信息系统项目管理师历年真题及权威答案_信息系统项目管理师试题及模拟题_软考考试题库_希赛网 2016年下半年信息系统项目管理师真题及答案_信息系统项目管理 ...

最新文章

  1. 解决微信小程序配置https不成功问题
  2. poj 1990 MooFest(转化成树状数组求和)
  3. word中viso/math type公式比文字大
  4. idea 开发spark 程序代码
  5. Partitioning Strategies
  6. LeetCode 1656. 设计有序流(数组)
  7. 我能想到的圆角背景的实现方法
  8. 用命令行快速打开软件
  9. idea设置提示重复代码下去掉波浪线
  10. mysql清空数据库_mysql命令行快速清空数据库的方法
  11. jQuery实现的添加到产品对比
  12. LC.740. Delete and Earn
  13. 程序员、技术主管和架构师
  14. 阅读图像显著性检测论文三:Saliency Detection A Spectral Residual Approach
  15. 气传导耳机和骨传导耳机的区别是啥?气传导耳机有哪些优缺点?
  16. 面试时,如何回答关于“缺点”的问题——大学生求职七大昏招衍生系列(2)
  17. 产生虚假的用于欺骗的IP数据包程序实践——Teardrop
  18. 为什么很多人吐槽谭浩强的C语言程序设计?
  19. codeforces 1395C Boboniu and Bit Operations(思维)
  20. 云原生、大数据、AI领域的开源服务创新

热门文章

  1. 进程、系统性能相关知识
  2. 神一样存在的他,全面协助你度过AI时代难关,吊打同行!
  3. 拓嘉启远:如何利用多多场景引流
  4. ++(a++)为什么不对呢?我来告诉你!
  5. 战报来了,第四届“强网”拟态防御国际精英挑战赛,11月10日赛况报道
  6. java生鲜超市进销存管理系统SSM框架
  7. 【办公】word中实现三线表(跨页,续表)
  8. 警翼记录仪视频恢复案例
  9. Dell开机时报错smartaudio无法运行
  10. 实践小项目----美颜相机滤镜功能(图像数据化处理)