本篇文章给大家带来的内容是关于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 |