加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营 > 正文

[2020年面试题-PHP 与 golang] .Go 和 PHP 在运行的时候有什么区

发布时间:2020-12-26 07:39:47 所属栏目:运营 来源:网络整理
导读:原文链接 分享:[分享] 大环境下瑟瑟发抖辞职的第二天,拿了两个 offer 面试题解析 看你简历里也有用过 Go,Go 和 PHP 在运行的时候有什么区别和优势? 题主原回答: PHP 每个请求进来时都会创建 fpm-worker 进程,从而导致系统并发高时 CPU 会产生频繁创建
副标题[/!--empirenews.page--]

原文链接

分享:[分享] 大环境下瑟瑟发抖辞职的第二天,拿了两个 offer

面试题解析

  1. 看你简历里也有用过 Go,Go 和 PHP 在运行的时候有什么区别和优势?
题主原回答:
PHP 每个请求进来时都会创建 fpm-worker 进程,从而导致系统并发高时 CPU 会产生频繁创建进程的开销,而 Go 不会。

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

?

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

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

?

?

[2020年面试题-PHP 与 golang] .Go 和 PHP 在运行的时候有什么区

?

解析回答:而 go 不会

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

php 运行原理

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

  1. CGI 通用网关接口模式
  2. FAST-CGI 模式
  3. CLI 命令行模式
  4. 模块模式

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 分页显示

?

模块模式

  1. Apache + mod_php
  2. lighttp + spawn-fcgi
  3. 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 进程来准备响应用户的

请求,如下图所示:

?

?

[2020年面试题-PHP 与 golang] .Go 和 PHP 在运行的时候有什么区

?

[2020年面试题-PHP 与 golang] .Go 和 PHP 在运行的时候有什么区

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

?

golang 运行原理

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

看看 go run 与 go build 的区别

o 的执行原理以及 Go 的命令

?

go run 的执行过程

?

?

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读