控制器访问 /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. 顶 最新简捷实用的JSP动态网站环境搭建详细步骤

    阿里西西小编给您推荐这个最新简捷实用的JSP动态网站环境搭建详细步骤讲解,这里还有关于JSP 动态网站 环境 搭建 的教程,希望您能够喜欢并学到东西提升自己的知识与技能,下面是内容详细阅读: 最新简捷 ...

  2. docker部署Broketrmq集群

    部署Broketrmq集群 通过docker-compose形式部署 首先创建 broker 配置文件,配置文件如下: brokerClusterName = DefaultCluster #集群名 ...

  3. Linux实战(20):非docker部署ELK

    部署环境: Elasticsearch:7.5.2 Kibana:7.5.2 Logstash:7.5.2 filebeat:7.5.2 redis:最新版 部署方式:rpm+二进制包 使用架构 软件 ...

  4. Java 异常面试题(2020 最新版)

    Java异常架构与异常关键字 Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制. Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程 ...

  5. window杀进程-----引用

    Windows平台   两步方法 :  1 查询端口占用,2 强行杀死进程 netstat -aon|findstr "8080" taskkill /pid 4136-t -f ...

  6. [视频]iNeuOS 自主可控工业互联网一体化解决方案 整体介绍

    演示地址:http://demo.ineuos.net  (注:自己注册) iNeuOS 自主可控工业互联网操作系统,提供全新解决方案 核心组件包括:边缘网关(iNeuLink).设备容器(iNeuK ...

  7. React手稿之State Hooks of Hooks

    React Hooks React在16.7.0-alpha.0版本中提到了Hooks的概念,目前还是Proposal阶段. 官方也陈述,接下来的90%的工作会投入到React Hooks中. 从目前 ...

  8. 08 . Jenkins之SpringCloud微服务+Vue+Docker持续集成

    简介 大致流程 /* 1.开发人员每天把代码提交到Gitlab代码仓库 2.jenkins从gitlab中拉取项目源码,编译并打包成war包,然后构建Docker镜像,将镜像上传到Harbor私有仓库 ...

  9. Hyper-V Server + Windows Admin Center

    2020年的十一黄金周是双节,偶然间得知再出现双节可能要几十年之后了,很可惜我并没有出去游玩的打算.所以假期没什么事,就来研究下Hyper Server + Windows Admin Center. ...

  10. 2020我终于成功搭建了Metasploitable3靶机

    0x00前言 在学习metasploit时我们往往需要一个靶场,下面为大家介绍一下如何在虚拟机中安装metasploitable 3靶场.Metasploitable3是Metasploitable2 ...