从web服务器谈谈php性能的提升

这里不是说php语言从5.x版本到7.x版本达到的速度的巨大提升。而是想说下从web请求的构架上,有哪些改变。

随着传统的静态页面开发,到动态交互网站,web服务器需要扩展php或者python的服务,来处理业务逻辑和连接数据库。这个时候CGI应运而生。

1.CGI和FastCGI

CGI在通讯中起到了一个翻译的作用,把nginx获取的网络请求翻译给php,再把php的执行结果翻译给nginx。举个所有phper都熟悉的东西,$_SERVER全局变量,就是从CGI读取来的。

每当客户请求CGI的时候,web服务器就请求操作系统生成一个新的CGI解释器进程,CGI的一个进程则处理完一个请求后退出,下一个请求来时再创建新进程。当然,这样在访问量很少没有并发的情况也行。可是当访问量增大,并发存在,这种方式就不适合了。于是就有了FastCGI。除了要不断的创建和销毁,每次创建都要重新读取php.ini和一些

FastCGI是CGI的管理器,在启动nginx的时候,FastCGI进程管理器自身初始化,启动多个CGI解释器进程并等待来自Web服务器的连接;当客户端请求到达web服务器时,FastCGI进程管理器选择并连接到一个CGI解释器。web服务器将CGI环境变量和标准输入发送到FastCGI子进程中。FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web服务器。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器的下一个连接。因为减少了创建和销毁,所以速度有了进一步提升。

2.PHP-FPM

PHP-FPM就是给php用的优化版本的FastCGI,nginx接收到请求以后,会把消息推给FastCGI所在的端口,因为nginx本身就是做反向代理的。PHP-FPM用master进程监听端口,用work进程来接收请求。

3.opcode和opcache

php是解释型语言,所以每次执行都要编译。一般情况线上代码是不会改变的,所以,有了opcache,通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。这也大大提升了php的速度。

4.swoole

随着业务的增大,即使是编译过代码也是庞大的,每次都要载入也很慢,swoole解决了这个问题。让 PHP 的代码加载到内存后,拥有更长的生命周期,这样建立的数据库连接和其他大的对象,不被释放。每次请求只需要处理很少的代码,而这些代码只在第一次运行时,被 PHP 解析器编译,驻留内存。另外,之前 PHP 不能实现的,对象持久化、数据库连接池,缓存连接池都可以实现。系统的运行效率会大大提高。他做微服务是把好手。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值