<?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才有作用。