swoole性能实测 多协程与多进程

***** 协程可以简单理解为线程,只不过这个线程是用户态的,不需要操作系统参与,创建销毁和切换的成本非常低,和线程不同的是协程没法利用多核 cpu 的,想利用多核 cpu 需要依赖 Swoole 的多进程模型。*****

上面是协程与进程区别,如果使用协程,没法利用多核CPU,我们现在来实测下 ,获取百度页面5000次
分别采用多协程与多线程模式来进行测试

测试环境:PHP 7.2.3 服务器配置: 1核1G swoole 4.0+

这是两台服务器配置
在这里插入图片描述
首先使用多进程去跑

<?php
use Swoole\Runtime;
use Swoole\Coroutine;
use function Swoole\Coroutine\run;
use Swoole\Process;
$s = microtime(true);
 for ($c = 5000; $c--;) {
     $process = new Process(function () use ($c) {
         if($c == 4999){
             echo microtime(true).'第一次';
         }
         if($c == 1){
             echo microtime(true).'第5000次';
         }
        file_get_contents("http://www.baidu.com");
     });
     $process->start();
 }
echo 'use ' . (microtime(true) - $s) . ' s';

1核2G的服务器
在这里插入图片描述
程序总耗时:68秒 第一个进程被创建到最后一个进程被创建耗时68s
QPS:217

4核8G服务器
在这里插入图片描述
程序总耗时:9.647秒 第一个进程被创建到最后一个进程被创建耗时9.6468s
QPS:520

下面使用协程环境下实现同样代码

<?php
use Swoole\Runtime;
use Swoole\Coroutine;
use function Swoole\Coroutine\run;
use Swoole\Process;

// 此行代码后,文件操作,sleep,Mysqli,PDO,streams等都变成异步IO,见'一键协程化'章节
Runtime::enableCoroutine();
$s = microtime(true);

// Swoole\Coroutine\run()见'协程容器'章节
run(function() {
    // 10k pdo and mysqli read
    for ($c = 5000; $c--;) {
        Coroutine::create(function () use ($c){
            if($c == 4999){
                echo '第一次时间:'.microtime(true)."\r\n";
            }
            if($c == 0){
                echo '第5000次时间:'.microtime(true);
            }
            file_get_contents("http://www.baidu.com");
        });
    }

});
echo '程序总耗时:' . (microtime(true) - $s) . ' s'."\r\n";

4核8G服务器
在这里插入图片描述
QPS:14310 程序总耗时:6.84s

1核2G服务器
在这里插入图片描述
QPS:21258 程序总耗时:7.169

这样可以看出来 如果使用协程去执行,创建速度会快很多,基本上QPS可以达到上万的级别
但是协程没办法用到多核。所以在多进程使用情况下的话 多核CPU才有作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值