Tp6+Swoole搭建,测试协程与异步差距 |
您所在的位置:网站首页 › 携程安装不了 › Tp6+Swoole搭建,测试协程与异步差距 |
由于部门的一个项目,用到了TP6+Swoole的方式重构,想偷偷师,所以自己也搭一个玩玩,最后有测试代码及结果。 首先,我们先拉取PHP的镜像,用到的是7.3-cli,7.4有坑,不推荐用。 docker pull php:7.3-cli 拉好之后,启动容器,命名为swoole,映射端口80,挂载一个空目录,tp6 docker run -it --name swoole -p 8080:80 -v D:\www\tp6:/code/tp6 php:7.3-cli 接下来安装swoole扩展,需要用到wget,所以先安装wget,然后下载源码的包下来 apt-get update apt-get install wget #下载swoole源码 wget https://github.com/swoole/swoole-src/archive/v4.6.4.tar.gz 下好之后,解压,然后cd到目录中,执行下面代码 cd swoole-src && \ phpize && \ ./configure && \ make && sudo make install 接下来下载安装composer,因为TP6需要用到composer,直接全局安装方式 curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer 安装好之后,来到tp6的路径,拉取tp6框架,然后再拉取think-swoole composer create-project topthink/think=6.0.x-dev tp6 #接着到根目录,安装swoole支持 cd tp6 composer require topthink/think-swoole 接着修改一下swoole.conf,再拉取完think-swoole模块后,会在config目录多出一个swoole.conf文件 #将127.0.0.1改成0.0.0.0 'host' => env('SWOOLE_HOST', '0.0.0.0'), // 监听地址 因为是在容器里面运行的,所以不能用127.0.0.1,得用 0.0.0.0,这样宿主机才能访问成功 接下来,我们写一个协程测试接口 public function test() { echo date('Y-m-d H:i:s') . '--start..' . ''; $result = []; for ($i = 1; $i add(); go(function() use($wg, &$result){ for ($i = 1; $i done(); }); $wg->add(); go(function () use($wg, &$result) { for ($n = 11; $n done(); }); $wg->wait(); echo date('Y-m-d H:i:s') . '--done..' . PHP_EOL; dump($result); } 结果对比![]() ![]() ![]() ![]() ![]() ![]() ![]() 为什么协程还是这么快呢,因为协程是轻量级线程,协程也是属于线程,协程是在线程里执行的。协程的调度是用户手动切换的,所以又叫用户空间线程。协程的创建、切换、挂起、销毁全部为内存操作,消耗是非常低的。 一个协程默认分配8K内存,假设我们在协程中执行的代码使用的栈内存,不超过8K,那么1G的内存大约可以创建多少个协程呢?1G= 1024MB = (1024 * 1024)KB, max_coroutine_num = 1024 * 1024 / 8 = 130072。也就是说1G内存就可以创建10w+的协程数量。相当的可观。 协程的调度策略是:协作式调度;协作式调度指的是,当一个协程遇到IO阻塞,会挂起,让另一个协程调度资源,而且因为协程很轻量级,切换速度非常快,很适合用于IO高并发场景。 当我把请求数大幅的调到100时 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |