swoft 协程 的使用
控制器访问 /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 协程 的使用相关推荐
- Swoft 2 Beta 发布,基于 Swoole 的云原生协程框架
Swoft 是首个基于 Swoole 原生协程的框架,从开发到发布据今已有2年多. 1.x 发布以来,已有大量的开发人员和企业使用,得到了大家的认可.从去年11月份开始,将近半年的时间从零开始,底层吸 ...
- Swoft 1.0 正式来袭,首个基于 Swoole 原生协程的框架
历时 1 年多紧锣密鼓的开发,以及愉快而忙碌的春节假期,期间 github star 数从 500 到快破 1k,码云首页推荐,Swoole 作者 Rango 和社区的大力支持,Swoft 1.0 正 ...
- mysql 连接查询_Swoole 实战:MySQL 查询器的实现(协程连接池)
Swoole 实战:MySQL 查询器的实现(协程连接池) 需求分析 本篇我们将通过 Swoole 实现一个自带连接池的 MySQL 查询器: 1. 支持通过链式调用构造并执行 SQL 语句: 2. ...
- IMI 基于 Swoole 开发的协程 PHP 开发框架 常驻内存、协程异步非阻塞
介绍 IMI 是基于 Swoole 开发的协程 PHP 开发框架,拥有常驻内存.协程异步非阻塞IO等优点. IMI 框架文档丰富,上手容易,致力于让开发者跟使用传统 MVC 框架一样顺手. IMI 框 ...
- PHP面试遇到面试官的swoole协程三连问,快哭了!
什么是进程? 进程就是应用程序的启动实例.独立的文件资源,数据资源,内存空间. 什么是线程? 线程属于进程,是程序的执行者.一个进程至少包含一个主线程,也可以有更多的子线程.线程有两种调度策略,一是: ...
- Kotlin协程使用,协程使用注意事项,协程中的await方法使用|不使用suspend使用协程
参见 码云 协程使用方法一 (Dispatchers调度器模式) 指定不同线程.同线程会挂起并阻塞(挂起是不影响主线程执行,阻塞是同样的IO线程会阻塞) withContext(Dispatchers ...
- 连接池和协程池为何能提升并发能力?
你有没有发现,"内存池"和"进程池"都带有"池"字?其实,这两种技术都属于"池化技术".它通常是由系统预先分配一批资源并 ...
- Go 知识点(14) — Go 多协程(单个协程触发panic会导致其它所有协程挂掉,每个协程只能捕获到自己的 panic 不能捕获其它协程)
在多协程并发环境下,我们常常会碰到以下两个问题.假设我们现在有 2 个协程,我们叫它们协程 A 和 B . [问题1]如果协程 A 发生了 panic ,协程 B 是否会因为协程 A 的 panic ...
- Go 知识点(11) — goroutine 泄露、设置子协程退出条件
1. 问题现象 如果在开发过程中不考虑 goroutine 在什么时候能退出和控制 goroutine 生命期,就会造成 goroutine 失控或者泄露的情况 ,看示例代码: func consum ...
最新文章
- 结构体的两种声明方式:堆上和栈上以及在双链表的应用
- Linux下ssh登录速度慢的解决办法
- Vue如何引入ElementUI进行使用
- linux shell 数组对比,bash shell之数组使用(牛逼篇)
- 方式程0day MS17-010远程溢出漏洞测试
- python discover()没有加载测试用例_对python_discover方法遍历所有执行的用例详解
- revit java 接口_如何使用Revit API获取axis属性?
- 大脑比机器智能_机器大脑的第一步
- systemd 与 sysVinit 彩版对照表
- 面向对象六大原则——开闭原则
- 联想微型计算机的摄像头驱动,Lenovo EasyCamera 联想摄像头驱动
- IE无法浏览网页的常见原因及解决方法(转)
- win10键盘锁住了怎么解决
- Linux命令 - df命令
- mysql stmt attr set_mysqli_stmt::attr_set()
- HDU-5238 Calculator
- 目标检测回归损失函数:SmoothL1/IoU/GIoU/DIoU/CIoU Loss
- CVPR2022 | CVPR2022最全整理,CVPR2022下载链接,CVPR2022全部论文代码
- 机器学习模型自我代码复现:SVM(SMO算法)
- HTTP method中, PUT和PATCH两者有何区别, 大致如何用 ?
热门文章
- matlab有无并行功能,使用MATLAB并行计算功能提高多核系统性能
- 【python初级】os.path.isfile(path)判断路径是否为文件
- C语言运算符号优先级测试代码(i++ ,++i)
- linux下ctrl 常用组合键
- 毕业设计答辩准备(双频介质谐振器天线)
- Ubuntu设置某个端口只能固定IP访问
- css让span标签强制换行
- css字体像素教程,详解CSS中的字体属性的使用
- IJCAI18 阿里妈妈广告
- linux gui开发工具2017,linux – 快速开发GUI命令行