当前位置: 首页 > news >正文

swoole协程

协程执行顺序

//hyperf框架
use Co;go(function () {Co::sleep(1); // Io等待一秒echo "hello go1 \n";});echo "hello main \n";go(function () {echo "hello go2 \n";});//打印结果hello mainhello go2hello go1/*运行此段代码, 系统启动一个新进程程序从上往下执行遇到第一个 go(), 当前进程中生成一个协程协程中遇到 IO阻塞 (这里是 Co::sleep() 模拟出的 IO等待), 协程让出控制, 进入协程调度队列进程继续向下执行, 输出 hello main,不会等待上面的go程执行完。所以是异步的。执行下一个协程, 输出 hello go2之前的协程准备就绪, 继续执行, 输出 hello go1/*
  • 协程没有 IO 等待的时候,正常执行 PHP 代码,不会产生执行流程切换
  • 单个协程内的代码运行仍是串行的,从上往下执行
  • 协程遇到 IO 等待 立即将控制权切换,待 IO 完成后,重新将执行流切回原来协程切出的点
  • 多个协程的执行顺序是无法确定的,由调度器自行决定。Go的调度器使用并发和并行的方式来执行协程,具体的调度策略是非确定性的
  • 协程嵌套执行流程由外向内逐层进入,直到发生 IO,然后切到外层协程,父协程不会等待子协程结束,即为主死从亡

注意要点

协程中不能存在阻塞代码

  • 有阻塞代码
    白开协程了
go(function () {sleep(1); // 未开启协程 runtime, 此处会阻塞, 输出为 go -> mainecho "go \n";
});
echo "main \n";

执行结果为

go
main

sleep()是原生php语句,阻塞式的

  • 无阻塞代码
    Co::sleep()触发协程调度器
//一键开启协程
\Swoole\Runtime::enableCoroutine();go(function () {sleep(1); // 开启协程 runtime, 此处为阻塞, 输出为 main -> go//不开启一键协程,也可以使用 Co::sleep(1)来实现;echo "go \n";
});
echo "main \n";

执行结果

main
go
http://www.lryc.cn/news/310358.html

相关文章:

  • Android Gradle 开发与应用 (一) : Gradle基础
  • PostgreSQL操作笔记
  • 【微服务】微服务中常用认证加密方案总结
  • 【Unity】实现从Excel读取数据制作年份选择器
  • Sqli-labs靶场第18关详解[Sqli-labs-less-18]自动化注入-SQLmap工具注入
  • 【测开求职】2023秋招快手一面面经
  • 【Go语言】Go语言中的字典
  • Matlab 机器人工具箱 创建机器人
  • 跨平台指南:在 Windows 和 Linux 上安装 OpenSSL 的完整流程
  • JAVA请求示例获取1688商品详情数据API接口item_get-获得阿里巴巴商品详情(按关键词搜索商品列表)
  • 安卓手机安装termux、kali linux及基本配置
  • Python 实现海康机器人工业相机 MV-CS050-10GC 的实时显示视频流及拍照功能(实时显示视频流同时可以进行拍照)
  • 武器大师——操作符详解(下)
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:Popup控制)
  • Python系列(20)—— 排序算法
  • MySQL中json类型的字段
  • 算法学习——GCD与欧拉函数
  • 40. 组合总和 II(力扣LeetCode)
  • Ubuntu上Jenkins自动化部署Gitee上SpringBoot项目
  • 延迟任务基于DeyalQueue
  • Linux 查询端口被占用命令
  • 【c++】string类---标准库中的string类
  • GO语言学习笔记(与Java的比较学习)(五)
  • Sora:探索大型视觉模型的前世今生、技术内核及未来趋势
  • 基于springboot实现图书馆管理系统项目【项目源码+论文说明】计算机毕业设计
  • MATLAB环境下基于高斯滤波器-广义拉普拉斯算子的细胞核自动检测
  • 【探索AI】十一 深度学习之第1周:深度学习概述与基础
  • 【简说八股】Spring事务失效可能是哪些原因?
  • 【语音识别】- CTC损失计算的原理
  • MySQL字符集和比较规则