控制器访问 /hi

    /*** @Swoft\Bean\Annotation\Mapping\Inject("UserService")* @var  UserService*/public $userService;/*** @RequestMapping("/")* @throws Throwable*/public function index(): Response{/** @var Renderer $renderer */$renderer = Swoft::getBean('view');$content  = $renderer->render('home/index');return context()->getResponse()->withContentType(ContentType::HTML)->withContent($content);}/*** @RequestMapping("/hi")** @return Response*/public function hi(){return $this->userService->test();}

调用service  里面使用协程 最终访问前端页面 立马返回了 数据

UserService.php

<?phpnamespace App\Service;use function foo\func;use Swoft\Bean\Annotation\Mapping\Bean;use Swoft\Co;use Swoft\Log\Helper\CLog;/*** Class UserService* @Bean("UserService")* @package App\Service*/class UserService{public function __construct(){}public function test(){Co::create(function(){Co::sleep(10);for($i=0;$i<10;$i++){CLog::info("hello: " . $i);}});Co::create(function(){Co::sleep(20);var_dump("world");});$id = Co::id();var_dump($id);$id = Co::tid();var_dump($id);return "nihao";}}

  

过了十秒 和二十秒后分别打印出了数据

改为帮助函数

sgo(function(){Co::sleep(10);for($i=0;$i<10;$i++){CLog::info("hello");}});

srun

启动协程并等待执行结束。

public function test()
{srun(function(){sgo(function(){for($i=0;$i<10;$i++){Co::sleep(1);CLog::info("hello: " . $i);}});sgo(function(){for($i=0;$i<10;$i++){Co::sleep(1);CLog::warning("hello: " . $i);}});return true;});$id = Co::id();var_dump($id);$id = Co::tid();var_dump($id);return "test";    // 最先返回, 早于 srun}

swoft 协程 的使用相关推荐

  1. Swoft 2 Beta 发布,基于 Swoole 的云原生协程框架

    Swoft 是首个基于 Swoole 原生协程的框架,从开发到发布据今已有2年多. 1.x 发布以来,已有大量的开发人员和企业使用,得到了大家的认可.从去年11月份开始,将近半年的时间从零开始,底层吸 ...

  2. Swoft 1.0 正式来袭,首个基于 Swoole 原生协程的框架

    历时 1 年多紧锣密鼓的开发,以及愉快而忙碌的春节假期,期间 github star 数从 500 到快破 1k,码云首页推荐,Swoole 作者 Rango 和社区的大力支持,Swoft 1.0 正 ...

  3. mysql 连接查询_Swoole 实战:MySQL 查询器的实现(协程连接池)

    Swoole 实战:MySQL 查询器的实现(协程连接池) 需求分析 本篇我们将通过 Swoole 实现一个自带连接池的 MySQL 查询器: 1. 支持通过链式调用构造并执行 SQL 语句: 2. ...

  4. IMI 基于 Swoole 开发的协程 PHP 开发框架 常驻内存、协程异步非阻塞

    介绍 IMI 是基于 Swoole 开发的协程 PHP 开发框架,拥有常驻内存.协程异步非阻塞IO等优点. IMI 框架文档丰富,上手容易,致力于让开发者跟使用传统 MVC 框架一样顺手. IMI 框 ...

  5. PHP面试遇到面试官的swoole协程三连问,快哭了!

    什么是进程? 进程就是应用程序的启动实例.独立的文件资源,数据资源,内存空间. 什么是线程? 线程属于进程,是程序的执行者.一个进程至少包含一个主线程,也可以有更多的子线程.线程有两种调度策略,一是: ...

  6. Kotlin协程使用,协程使用注意事项,协程中的await方法使用|不使用suspend使用协程

    参见 码云 协程使用方法一 (Dispatchers调度器模式) 指定不同线程.同线程会挂起并阻塞(挂起是不影响主线程执行,阻塞是同样的IO线程会阻塞) withContext(Dispatchers ...

  7. 连接池和协程池为何能提升并发能力?

    你有没有发现,"内存池"和"进程池"都带有"池"字?其实,这两种技术都属于"池化技术".它通常是由系统预先分配一批资源并 ...

  8. Go 知识点(14) — Go 多协程(单个协程触发panic会导致其它所有协程挂掉,每个协程只能捕获到自己的 panic 不能捕获其它协程)

    在多协程并发环境下,我们常常会碰到以下两个问题.假设我们现在有 2 个协程,我们叫它们协程 A 和 B . [问题1]如果协程 A 发生了 panic ,协程 B 是否会因为协程 A 的 panic ...

  9. Go 知识点(11) — goroutine 泄露、设置子协程退出条件

    1. 问题现象 如果在开发过程中不考虑 goroutine 在什么时候能退出和控制 goroutine 生命期,就会造成 goroutine 失控或者泄露的情况 ,看示例代码: func consum ...

最新文章

  1. 结构体的两种声明方式:堆上和栈上以及在双链表的应用
  2. Linux下ssh登录速度慢的解决办法
  3. Vue如何引入ElementUI进行使用
  4. linux shell 数组对比,bash shell之数组使用(牛逼篇)
  5. 方式程0day MS17-010远程溢出漏洞测试
  6. python discover()没有加载测试用例_对python_discover方法遍历所有执行的用例详解
  7. revit java 接口_如何使用Revit API获取axis属性?
  8. 大脑比机器智能_机器大脑的第一步
  9. systemd 与 sysVinit 彩版对照表
  10. 面向对象六大原则——开闭原则
  11. 联想微型计算机的摄像头驱动,Lenovo EasyCamera 联想摄像头驱动
  12. IE无法浏览网页的常见原因及解决方法(转)
  13. win10键盘锁住了怎么解决
  14. Linux命令 - df命令
  15. mysql stmt attr set_mysqli_stmt::attr_set()
  16. HDU-5238 Calculator
  17. 目标检测回归损失函数:SmoothL1/IoU/GIoU/DIoU/CIoU Loss
  18. CVPR2022 | CVPR2022最全整理,CVPR2022下载链接,CVPR2022全部论文代码
  19. 机器学习模型自我代码复现:SVM(SMO算法)
  20. HTTP method中, PUT和PATCH两者有何区别, 大致如何用 ?

热门文章

  1. matlab有无并行功能,使用MATLAB并行计算功能提高多核系统性能
  2. 【python初级】os.path.isfile(path)判断路径是否为文件
  3. C语言运算符号优先级测试代码(i++ ,++i)
  4. linux下ctrl 常用组合键
  5. 毕业设计答辩准备(双频介质谐振器天线)
  6. Ubuntu设置某个端口只能固定IP访问
  7. css让span标签强制换行
  8. css字体像素教程,详解CSS中的字体属性的使用
  9. IJCAI18 阿里妈妈广告
  10. linux gui开发工具2017,linux – 快速开发GUI命令行