• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Swoole同步模式与协程模式之间的对比 (详细)

php 搞代码 3年前 (2022-01-21) 20次浏览 已收录 0个评论

本篇文章给大家带来的内容是关于Swoole同步模式与协程模式之间的对比 (详细) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

在现代化 PHP 高级开发中,Swoole 为 PHP 带来了更多可能,如:常驻内存、协程,关于传统的 Apache/FPM 模式与常驻内存模式(同步)的巨大差异,之前我做过测试,大家能直观的感受到性能的巨大提升,但是协程到来后,又带来了多少性能的提升呢?提升的又是哪方面的性能?下面逐步测试一下。

传统的 Apache/FPM 模式与常驻内存模式(同步)的测试文章:
MixPHP 并发性能全面对比测试

协程的优势

协程模式与常驻内存模式(同步)/传统模式相比:

常驻模式/传统模式都属于同步阻塞编程,由于同一个进程不能并行处理请求,所以为了提高并发,只能开启更多的进程,通常超过 100 甚至更多,每个进程都有基础的内存消耗,加起来就很多了,而且受限于 Linux 总进程数限制,并发总数无法突破,加上进程非常多之后,CPU 需要更多的线程切换,浪费了很多性能,当然相比 FPM 的传统模式每次都需从头开始,常驻模式还是要好非常多的,但是协程显然更加优秀。

协程模式的执行方式:

协程模式中一个进程可以同时执行 N 个请求,但同一时刻只执行其中的某一个请求,也就是说,当执行到 MySQL/Redis 这些客户端时,由于需要等待客户端响应,常驻模式/传统模式通常是在傻傻的等待响应,而协程这个时候会挂起当前协程,切换到其他协程中去处理其他请求,所以协程能同时处理 N 个请求,每增加一个请求只需增加一些内存消耗,相比增加一个进程的内存消耗,显然是少太多的,由于协程能并行处理,所以通常只需配置于 CPU 数量 1~2 倍左右的进程数即可,更少的进程带来更少的 CPU 线程切换,又减少很多性能损耗。

开始测试

MixPHP 是一个基于 Swoole 的FPM、常驻内存、协程三模 PHP 高性能框架,由于该框架同时具备常驻内存模式、协程模式,所以能很方便的测试结果。

测试环境:

docker 容器,限制只能使用 1 CPU。

其他参数如下:

Server      Name:      mix-httpdFramework   Version:   1.1.0-RCPHP         Version:   7.2.9Swoole      Version:   4.1.0Listen      Addr:      127.0.0.1Listen      Port:      9501

代码:

模拟常用的 HTTP 开发需求,执行三个 SQL 请求。

// 默认动作public function actionIndex(){    PDO::createCommand("select * from `test` where id = 1")->queryOne();    PDO::createCommand("select * from `test` where id = 2")->queryOne();    return PDO::createCommand("select * from `test` limit 5")->queryAll();}

测试结果

常驻内存模式(同步):

进程数 并发数 RPS
8 100 838.65
8 300 683.78
8 500 688.56
50 100 770.69、本文来源gao($daima.com搞@代@#码$网搞gaodaima代码
50 300 304.90
50 300 378.95

协程模式:

进程数 并发数 RPS
8 100 834.12
8 300 837.50
8 500 824.14

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Swoole同步模式与协程模式之间的对比 (详细)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址