美文网首页
php-fpm原理

php-fpm原理

作者: 百文计划 | 来源:发表于2020-07-27 21:00 被阅读0次

FastCGI是什么?它是一种协议,所以它是一种文档,文档中说明了交互方式,交互的字段等等信息。FastCGI不是一种真实存在的东西,它是一种相互之间的协议。

比如http就是一种协议,它规定了网络上的文本信息如何传输。浏览器兼容了这种协议,是说开发浏览器的程序员,按照协议的要求,进行编码开发。比如什么情况下显示什么样的信息,什么情况下处理什么样的字段等等。php的curl支持发送http协议,是说最初开发curl的程序员,按照http协议的规定,去拼接tcp报文进行发送。所以http协议不是以实物形式存在的,而浏览器和crul是真实存在的。

同样FastCGI是一种协议,它的目的是把http服务器和动态语言解绑。FastCGI其实是cgi程序的升级版,从各个方面对cgi进行升级。大家注意协议升级一般都是为了实现更多的功能,一般都是前向兼容的。最主要的升级就是FastCGI从协议设计角度考虑了动态语言进程长期运行的方式,提升了效率。

比如移动通信协议,从2G到3G,从3G到4G,支持的场景更加丰富了,通信的方式可能会发生很大的变化。简单的就是2G的通信设备,3G时代都不能使用了,3G还需要新的通信设备。从cgi到FastCGI的转变,导致php也需要进行升级。原生php支持cgi协议,但是到了FastCGI阶段,php无法支持这个协议了,所以PHP-FPM出现了。

支持FastCGI的语言有很多,比如python叫做flup python模块,perl叫做perl-fastcgi,而php叫做php-fpm,这个名字很是很容易搞混。

FPM的全称是FastCGI Process Manager:FastCGI进程管理器。fpm的实现架构是多进程模型,master进程负责管理,worker进行负责处理,没有消息则阻塞等待。这样在master进程的管理下,worker进行可以常驻内存执行程序,提高了php的并发能力。

设计到多进程情况,必然会考虑多个进程如何管理?如何感知到进程的变化?如果控制进程开启或关闭?master负责创建worker,所有的work进程都需要由master进行创建。master进行worker进程的控制通过信号来实现。为了感知worker进程的关闭,master进程维护了一个记分板,会定期对记分板进行更新,这样master进程就可以直到worker进程的运行状态。

master进程类似于管理者,worker进程类似于工人。具体的活是由工人worker进程干的,管理者有个报表记分板,能够看到工人worker进程目前的情况,如果工人worker进程不够了,管理者master进程会增加工人worker进程,如果工人worker进程过多了,管理者master进程会清除工人worker进程。

相关文章

网友评论

      本文标题:php-fpm原理

      本文链接:https://www.haomeiwen.com/subject/czevlktx.html