控制器访问 /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

<?php

namespace 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");
} }); Co::create(function(){
Co::sleep(20);
var_dump("world");
}); $id = Co::id();
var_dump($id);
$id = Co::tid();
var_dump($id);
return "nihao";
} }

  

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

erver start success (Master PID: 18085, Manager PID: 18090)
int(2)
int(2)
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
string(5) "world"

  

改为帮助函数

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");
}

});

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

return true;

});

$id = Co::id();
var_dump($id);
$id = Co::tid();
var_dump($id);
return "nihao";
}

swoft 使用协程 初试的更多相关文章

  1. Swoole协程与传统fpm同步模式比较

    如果说数组是 PHP 的精髓,数组玩得不6的,根本不能算是会用PHP.那协程对于 Swoole 也是同理,不理解协程去用 Swoole,那就是在瞎用. 首先,Swoole 只能运行在命令行(Cli)模 ...

  2. Swoft2.x 小白学习笔记 (三) --- Task、协程

    介绍swoft中 1.Task 2.协程 一:Task任务: 1.配置,在 app/bean.php文件中加入 'httpServer' => [ // ... 'on' => [ Swo ...

  3. Python(八)进程、线程、协程篇

    本章内容: 线程(线程锁.threading.Event.queue 队列.生产者消费者模型.自定义线程池) 进程(数据共享.进程池) 协程 线程 Threading用于提供线程相关的操作.线程是应用 ...

  4. Lua的协程和协程库详解

    我们首先介绍一下什么是协程.然后详细介绍一下coroutine库,然后介绍一下协程的简单用法,最后介绍一下协程的复杂用法. 一.协程是什么? (1)线程 首先复习一下多线程.我们都知道线程——Thre ...

  5. 协程--gevent模块(单线程高并发)

    先恶补一下知识点,上节回顾 上下文切换:当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行.这种 ...

  6. Python 【第五章】:线程、进程和协程

    Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. #!/usr/bin/env python # -*- coding:utf-8 -*- import t ...

  7. 进击的Python【第十章】:Python的socket高级应用(多进程,协程与异步)

    Python的socket高级应用(多进程,协程与异步)

  8. unity 协程

    StartCoroutine在unity3d的帮助中叫做协程,意思就是启动一个辅助的线程. 在C#中直接有Thread这个线程,但是在unity中有些元素是不能操作的.这个时候可以使用协程来完成. 使 ...

  9. golang 裸写一个pool池控制协程的大小

    这几天深入的研究了一下golang 的协程,读了一个好文 http://mp.weixin.qq.com/s?__biz=MjM5OTcxMzE0MQ==&mid=2653369770& ...

随机推荐

  1. Linux:用tar解压文件出现错误Not found in archive

    问题:用tar解压文件出现错误Not found in archive 解决办法:加上-C参数  tar -zxvf ZenTaoPMS.8.1.3.zbox_64.gz -C /usr 因为压缩文件 ...

  2. 嵌入式Linux软链接使用技巧

    软链接概述 软链接是Linux下常用的一种共享文件方式.目录的方式,这种方式类似于Windows下的快捷方式.一般一个文件或者目录在不同的路径都需要的时候,可以通过创建软链接的方式来共享,这样只系统下 ...

  3. (python)生产者消费者模型

    生产者消费者模型当中有两大类重要的角色,一个是生产者(负责造数据的任务),另一个是消费者(接收造出来的数据进行进一步的操作). 为什么要使用生产者消费者模型? 在并发编程中,如果生产者处理速度很快,而 ...

  4. js中页面加载完成后执行的几种方法及执行顺序

    在js和jquery使用中,经常使用到页面加载完成后执行某一方法.通过整理,大概是五种方式(其中有的只是书写方式不一样). 1:使用jQuery的$(function){}; 2:使用jquery的$ ...

  5. 快速生成网络mp4视频缩略图技术

    背景 由于网络原因,在下载视频之前我们往往会希望能够先生成一些视频的缩略图,大致浏览视频内容,再确定是否应花时间下载.如何能够快速得到视频多个帧的缩略图的同时尽量少的下载视频的内容,是一个值得研究的问 ...

  6. 吴恩达《深度学习》-课后测验-第二门课 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)-Week 1 - Practical aspects of deep learning(第一周测验 - 深度学习的实践)

    Week 1 Quiz - Practical aspects of deep learning(第一周测验 - 深度学习的实践) \1. If you have 10,000,000 example ...

  7. SDWebImageInfo

    SDWebImage 简介 iOS中著名的牛逼的网络图片处理框架 包含的功能:图片下载.图片缓存.下载进度监听.gif处理等等 用法极其简单,功能十分强大,大大提高了网络图片的处理效率 国内超过90% ...

  8. JVM_02 类加载子系统

    JVM细节版架构图 本文针对Class Loader SubSystem这一块展开讲解类加载子系统的工作流程 类加载子系统作用 1.类加载子系统负责从文件系统或者网络中加载class文件,class文 ...

  9. Docker实战(2):主从库搭建

    入门 基于Docker的Mysql主从复制搭建 首先安装docker 拉取mysql镜像:5.7版本 启动主从数据库容器 docker run -p 3339:3306 --name Maste -e ...

  10. TS数据类型:类型别名/联合类型/字面量类型/类型推论等纲要

    在学C/C++  Java等强类型语言时,变量类型是唯一的,需要先指定.PHP JavaScript等弱类型语言时,无需指定变量类型 但是,TypeScript里面的联合类型 (Union Type) ...