本篇文章给大家带来的内容是关于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-httpd Framework Version: 1.1.0-RC PHP Version: 7.2.9 Swoole Version: 4.1.0 Listen Addr: 127.0.0.1 Listen 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 |
50 | 300 | 304.90 |
50 | 300 | 378.95 |
协程模式:
进程数 | 并发数 | RPS |
---|---|---|
8 | 100 | 834.12 |
8 | 300 | 837.50 |
8 | 500 | 824.14 |
协程在本次测试中并没有像之前的传统 Apache/FPM 模式与常驻内存模式(同步)的测试一样展现出巨大的性能提升,说明:
在少量能快速响应的 SQL 请求中,协程的提升并不明显,应该要在响应时间更大时,才能感受到协程优势。
常驻内存模式的进程数配置过多,并发性能反而会降低,该问题同样适用于传统 Apache/FPM 模式。
常驻内存模式(同步)详细测试
首先 8 个 Worker 进程,并发 100 测试,RPS 为 838.65。
C:\Users\EDZ>ab -n 10000 -c 100 http://www.a.com/ This is ApacheBench, Version 2.3 3d3b4d2d36ecdad9084894b1b5ed13e5 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.a.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: nginx/1.13.9 Server Hostname: www.a.com Server Port: 80 Document Path: / Document Length: 101 bytes Concurrency Level: 100 Time taken for tests: 11.924 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 2660000 bytes HTML transferred: 1010000 bytes Requests per second: 838.65 [#/sec] (mean) Time per request: 119.239 [ms] (mean) Time per request: 1.192 [ms] (mean, across all concurrent requests) Transfer rate: 217.85 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.2 0 4 Processing: 20 118 18.3 118 195 Waiting: 19 118 18.4 118 195 Total: 20 118 18.4 119 195 Percentage of the requests served within a certain time (ms) 50% 119 66% 126 75% 130 80% 133 90% 141 95% 147 98% 155 99% 161 100% 195 (longest request)
然后使用 8 个 Worker 进程,并发 300 测试,RPS 为 683.78。
C:\Users\EDZ>ab -n 10000 -c 300 http://www.a.com/ This is ApacheBench, Version 2.3 3d3b4d2d36ecdad9084894b1b5ed13e5 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.a.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: nginx/1.13.9 Server Hostname: www.a.com Server Port: 80 Document Path: / Document Length: 101 bytes Concurrency Level: 300 Time taken for tests: 14.624 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 2660000 bytes HTML transferred: 1010000 bytes Requests per second: 683.78 [#/sec] (mean) Time per request: 438.735 [ms] (mean) Time per request: 1.462 [ms] (mean, across all concurrent requests) Transfer rate: 177.62 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 30.0 0 3000 Processing: 62 432 493.4 354 3457 Waiting: 54 431 488.1 354 3455 Total: 62 433 494.1 354 3457 Percentage of the requests served within a certain time (ms) 50% 354 66% 373 75% 385 80% 392 90% 411 95% 432 98% 3170 99% 3266 100% 3457 (longest request)
然后使用 8 个 Worker 进程,并发 500 测试,RPS 为 688.56。
C:\Users\EDZ>ab -n 10000 -c 500 http://www.a.com/ This is ApacheBench, Version 2.3 3d3b4d2d36ecdad9084894b1b5ed13e5 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.a.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: nginx/1.13.9 Server Hostname: www.a.com Server Port: 80 Document Path: / Document Length: 101 bytes Concurrency Level: 500 Time taken for tests: 14.523 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 2660000 bytes HTML transferred: 1010000 bytes Requests per second: 688.56 [#/sec] (mean) Time per request: 726.150 [ms] (mean) Time per request: 1.452 [ms] (mean, across all concurrent requests) Transfer rate: 178.87 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 30.0 0 3000 Processing: 102 707 618.4 596 3632 Waiting: 89 703 605.6 595 3629 Total: 102 707 618.9 596 3633 Percentage of the requests served within a certain time (ms) 50% 596 66% 620 75% 635 80% 645 90% 679 95% 3125 98% 3401 99% 3495 100% 3633 (longest request)
现在调整为 50 进程,100 并发测试,RPS 为 770.69。
进程的增加并没有带来并发量的提升。
C:\Users\EDZ>ab -n 10000 -c 100 http://www.a.com/ This is ApacheBench, Version 2.3 3d3b4d2d36ecdad9084894b1b5ed13e5 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.a.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: nginx/1.13.9 Server Hostname: www.a.com Server Port: 80 Document Path: / Document Length: 101 bytes Concurrency Level: 100 Time taken for tests: 12.975 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 2660000 bytes HTML transferred: 1010000 bytes Requests per second: 770.69 [#/sec] (mean) Time per request: 129.754 [ms] (mean) Time per request: 1.298 [ms] (mean, across all concurrent requests) Transfer rate: 200.20 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 42.4 0 3000 Processing: 10 128 499.8 56 7137 Waiting: 10 127 495.8 55 7137 Total: 11 129 503.3 56 7137 Percentage of the requests served within a certain time (ms) 50% 56 66% 72 75% 86 80% 97 90% 133 95% 179 98% 312 99% 3052 100% 7137 (longest request)
50 进程,300 并发测试,RPS 为 304.90。
对比 8 个进程时的结果,并发量降低非常明显,看来进程数过多并不能提升性能,反而会降低性能。
C:\Users\EDZ>ab -n 10000 -c 300 http://www.a.com/ This is ApacheBench, Version 2.3 3d3b4d2d36ecdad9084894b1b5ed13e5 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.a.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: nginx/1.13.9 Server Hostname: www.a.com Server Port: 80 Document Path: / Document Length: 101 bytes Concurrency Level: 300 Time taken for tests: 32.798 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 2660000 bytes HTML transferred: 1010000 bytes Requests per second: 304.90 [#/sec] (mean) Time per request: 983.942 [ms] (mean) Time per request: 3.280 [ms] (mean, across all concurrent requests) Transfer rate: 79.20 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 3 90.0 0 3001 Processing: 25 976 1339.8 189 3694 Waiting: 23 954 1316.5 188 3691 Total: 25 979 1341.0 189 3694 Percentage of the requests served within a certain time (ms) 50% 189 66% 289 75% 3094 80% 3113 90% 3184 95% 3249 98% 3315 99% 3375 100% 3694 (longest request)
50 进程,500 并发测试,RPS 为 378.95。
C:\Users\EDZ>ab -n 10000 -c 500 http://www.a.com/ This is ApacheBench, Version 2.3 3d3b4d2d36ecdad9084894b1b5ed13e5 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.a.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: nginx/1.13.9 Server Hostname: www.a.com Server Port: 80 Document Path: / Document Length: 101 bytes Concurrency Level: 500 Time taken for tests: 26.389 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 2660000 bytes HTML transferred: 1010000 bytes Requests per second: 378.95 [#/sec] (mean) Time per request: 1319.431 [ms] (mean) Time per request: 2.639 [ms] (mean, across all concurrent requests) Transfer rate: 98.44 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 2 79.4 0 3001 Processing: 64 1306 1434.7 341 3962 Waiting: 17 1224 1391.4 321 3959 Total: 65 1308 1435.2 342 3963 Percentage of the requests served within a certain time (ms) 50% 342 66% 3142 75% 3168 80% 3195 90% 3292 95% 3374 98% 3467 99% 3516 100% 3963 (longest request)
协程模式详细测试
首先 8 个 Worker 进程,并发 100 测试,RPS 为 834.12。
C:\Users\EDZ>ab -n 10000 -c 100 http://www.a.com/ This is ApacheBench, Version 2.3 3d3b4d2d36ecdad9084894b1b5ed13e5 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.a.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: nginx/1.13.9 Server Hostname: www.a.com Server Port: 80 Document Path: / Document Length: 101 bytes Concurrency Level: 100 Time taken for tests: 11.989 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 2660000 bytes HTML transferred: 1010000 bytes Requests per second: 834.12 [#/sec] (mean) Time per request: 119.886 [ms] (mean) Time per request: 1.199 [ms] (mean, across all concurrent requests) Transfer rate: 216.68 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.3 0 4 Processing: 84 119 9.8 122 165 Waiting: 84 119 9.8 122 164 Total: 84 119 9.8 123 165 Percentage of the requests served within a certain time (ms) 50% 123 66% 124 75% 125 80% 125 90% 126 95% 128 98% 131 99% 137 100% 165 (longest request)
然后使用 8 个 Worker 进程,并发 300 测试,RPS 为 837.50。
C:\Users\EDZ>ab -n 10000 -c 300 http://www.a.com/ This is ApacheBench, Version 2.3 3d3b4d2d36ecdad9084894b1b5ed13e5 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.a.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: nginx/1.13.9 Server Hostname: www.a.com Server Port: 80 Document Path: / Document Length: 101 bytes Concurrency Level: 300 Time taken for tests: 11.940 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 2660000 bytes HTML transferred: 1010000 bytes Requests per second: 837.50 [#/sec] (mean) Time per request: 358.207 [ms] (mean) Time per request: 1.194 [ms] (mean, across all concurrent requests) Transfer rate: 217.55 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 42.4 0 3001 Processing: 86 354 1043.0 161 7172 Waiting: 86 344 1011.9 160 7172 Total: 86 355 1044.5 161 7172 Percentage of the requests served within a certain time (ms) 50% 161 66% 182 75% 199 80% 212 90% 251 95% 302 98% 6103 99% 6135 100% 7172 (longest request)
然后使用 8 个 Worker 进程,并发 500 测试,RPS 为 824.14。
C:\Users\EDZ>ab -n 10000 -c 500 http://www.a.com/ This is ApacheBench, Version 2.3 3d3b4d2d36ecdad9084894b1b5ed13e5 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.a.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: nginx/1.13.9 Server Hostname: www.a.com Server Port: 80 Document Path: / Document Length: 101 bytes Concurrency Level: 500 Time taken for tests: 12.134 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 2660000 bytes HTML transferred: 1010000 bytes Requests per second: 824.14 [#/sec] (mean) Time per request: 606.690 [ms] (mean) Time per request: 1.213 [ms] (mean, across all concurrent requests) Transfer rate: 214.08 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.3 0 4 Processing: 92 332 585.3 198 6931 Waiting: 91 331 585.5 196 6931 Total: 92 332 585.3 198 6931 Percentage of the requests served within a certain time (ms) 50% 198 66% 242 75% 284 80% 334 90% 587 95% 932 98% 1216 99% 2390 100% 6931 (longest request)
相关推荐:
以上是Swoole同步模式与协程模式之间的对比 (详细)的详细内容。更多信息请关注PHP中文网其他相关文章!

PHP是一种服务器端脚本语言,用于动态网页开发和服务器端应用程序。1.PHP是一种解释型语言,无需编译,适合快速开发。2.PHP代码嵌入HTML中,易于网页开发。3.PHP处理服务器端逻辑,生成HTML输出,支持用户交互和数据处理。4.PHP可与数据库交互,处理表单提交,执行服务器端任务。

PHP在过去几十年中塑造了网络,并将继续在Web开发中扮演重要角色。1)PHP起源于1994年,因其易用性和与MySQL的无缝集成成为开发者首选。2)其核心功能包括生成动态内容和与数据库的集成,使得网站能够实时更新和个性化展示。3)PHP的广泛应用和生态系统推动了其长期影响,但也面临版本更新和安全性挑战。4)近年来的性能改进,如PHP7的发布,使其能与现代语言竞争。5)未来,PHP需应对容器化、微服务等新挑战,但其灵活性和活跃社区使其具备适应能力。

PHP的核心优势包括易于学习、强大的web开发支持、丰富的库和框架、高性能和可扩展性、跨平台兼容性以及成本效益高。1)易于学习和使用,适合初学者;2)与web服务器集成好,支持多种数据库;3)拥有如Laravel等强大框架;4)通过优化可实现高性能;5)支持多种操作系统;6)开源,降低开发成本。

PHP没有死。1)PHP社区积极解决性能和安全问题,PHP7.x提升了性能。2)PHP适合现代Web开发,广泛用于大型网站。3)PHP易学且服务器表现出色,但类型系统不如静态语言严格。4)PHP在内容管理和电商领域仍重要,生态系统不断进化。5)通过OPcache和APC等优化性能,使用OOP和设计模式提升代码质量。

PHP和Python各有优劣,选择取决于项目需求。1)PHP适合Web开发,易学,社区资源丰富,但语法不够现代,性能和安全性需注意。2)Python适用于数据科学和机器学习,语法简洁,易学,但执行速度和内存管理有瓶颈。

PHP用于构建动态网站,其核心功能包括:1.生成动态内容,通过与数据库对接实时生成网页;2.处理用户交互和表单提交,验证输入并响应操作;3.管理会话和用户认证,提供个性化体验;4.优化性能和遵循最佳实践,提升网站效率和安全性。

PHP在数据库操作和服务器端逻辑处理中使用MySQLi和PDO扩展进行数据库交互,并通过会话管理等功能处理服务器端逻辑。1)使用MySQLi或PDO连接数据库,执行SQL查询。2)通过会话管理等功能处理HTTP请求和用户状态。3)使用事务确保数据库操作的原子性。4)防止SQL注入,使用异常处理和关闭连接来调试。5)通过索引和缓存优化性能,编写可读性高的代码并进行错误处理。

在PHP中使用预处理语句和PDO可以有效防范SQL注入攻击。1)使用PDO连接数据库并设置错误模式。2)通过prepare方法创建预处理语句,使用占位符和execute方法传递数据。3)处理查询结果并确保代码的安全性和性能。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver CS6
视觉化网页开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。