iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >swoole协程的执行流程是什么
  • 627
分享到

swoole协程的执行流程是什么

2023-06-29 04:06:27 627人浏览 泡泡鱼
摘要

今天小编给大家分享一下swoole协程的执行流程是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在swoole中,Swo

今天小编给大家分享一下swoole协程的执行流程是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

在swoole中,Swoole server接收数据在worker进程触发onReceive回调,产生一个协程,Swoole为每个请求创建对应携程,协程中也能创建子协程,协程在底层实现上是单线程的,因此同一时间只有一个协程在工作。

教程操作环境:windows10系统、Swoole4版、DELL G3电脑

swoole协程的实现原理是什么

什么是进程?

进程就是应用程序的启动实例。独立的文件资源,数据资源,内存空间。

什么是线程?

线程属于进程,是程序的执行者。一个进程至少包含一个主线程,也可以有更多的子线程。线程有两种调度策略,一是:分时调度,二是:抢占式调度。

什么是协程?

协程是轻量级线程,协程也是属于线程,协程是在线程里执行的。协程的调度是用户手动切换的,所以又叫用户空间线程。协程的创建、切换、挂起、销毁全部为内存操作,消耗是非常低的。协程的调度策略是:协作式调度。

Swoole 协程的原理

Swoole4 由于是单线程多进程的,同一时间同一个进程只会有一个协程在运行。

Swoole server 接收数据在 worker 进程触发 onReceive 回调,产生一个携程。Swoole 为每个请求创建对应携程。协程中也能创建子协程。

协程在底层实现上是单线程的,因此同一时间只有一个协程在工作,协程的执行是串行的。

因此多任务多协程执行时,一个协程正在运行时,其他协程会停止工作。当前协程执行阻塞 io 操作时会挂起,底层调度器会进入事件循环。当有 IO 完成事件时,底层调度器恢复事件对应的协程的执行。。所以协程不存在 IO 耗时,非常适合高并发 IO 场景。

Swoole 的协程执行流程

  • 协程没有 IO 等待 正常执行 PHP 代码,不会产生执行流程切换

  • 协程遇到 IO 等待 立即将控制权切,待 IO 完成后,重新将执行流切回原来协程切出的点

  • 协程并行协程依次执行,同上一个逻辑

  • 协程嵌套执行流程由外向内逐层进入,直到发生 IO,然后切到外层协程,父协程不会等待子协程结束

协程的执行顺序

先来看看基础的例子:

Go(function () {    echo "hello go1 \n";});echo "hello main \n";go(function () {    echo "hello go2 \n";});

go() 是 \Co::create() 的缩写, 用来创建一个协程, 接受 callback 作为参数, callback 中的代码, 会在这个新建的协程中执行.

备注: \Swoole\Coroutine 可以简写为 \Co

上面的代码执行结果:

root@b98940b00a9b /v/w/c/p/swoole# php co.phphello go1hello mainhello go2

执行结果和我们平时写代码的顺序, 好像没啥区别. 实际执行过程:

  • 运行此段代码, 系统启动一个新进程

  • 遇到 go(), 当前进程中生成一个协程, 协程中输出 heelo go1, 协程退出

  • 进程继续向下执行代码, 输出 hello main

  • 再生成一个协程, 协程中输出heelo go2, 协程退出

运行此段代码, 系统启动一个新进程. 如果不理解这句话, 你可以使用如下代码:

// co.php<?phpsleep(100);

执行并使用 ps aux 查看系统中的进程:

root@b98940b00a9b /v/w/c/p/swoole# php co.php &⏎root@b98940b00a9b /v/w/c/p/swoole# ps auxPID   USER     TIME   COMMAND    1 root       0:00 php -a   10 root       0:00 sh   19 root       0:01 fish  749 root       0:00 php co.php  760 root       0:00 ps aux

我们来稍微改一改, 体验协程的调度:

use Co;go(function () {    Co::sleep(1); // 只新增了一行代码    echo "hello go1 \n";});echo "hello main \n";go(function () {    echo "hello go2 \n";});\Co::sleep() 函数功能和 sleep() 差不多, 但是它模拟的是 IO等待(IO后面会细讲). 执行的结果如下:root@b98940b00a9b /v/w/c/p/swoole# php co.phphello mainhello go2hello go1

怎么不是顺序执行的呢? 实际执行过程:

  • 运行此段代码, 系统启动一个新进程

  • 遇到 go(), 当前进程中生成一个协程

  • 协程中遇到 IO阻塞 (这里是 Co::sleep() 模拟出的 IO等待), 协程让出控制, 进入协程调度队列

  • 进程继续向下执行, 输出 hello main

  • 执行下一个协程, 输出 hello go2

  • 之前的协程准备就绪, 继续执行, 输出 hello go1

到这里, 已经可以看到 swoole 中 协程与进程的关系, 以及 协程的调度, 我们再改一改刚才的程序:

go(function () {    Co::sleep(1);    echo "hello go1 \n";});echo "hello main \n";go(function () {    Co::sleep(1);    echo "hello go2 \n";});

我想你已经知道输出是什么样子了:

root@b98940b00a9b /v/w/c/p/swoole# php co.phphello mainhello go1hello go2

以上就是“swoole协程的执行流程是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: swoole协程的执行流程是什么

本文链接: https://www.lsjlt.com/news/322544.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • swoole协程的执行流程是什么
    今天小编给大家分享一下swoole协程的执行流程是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在swoole中,Swo...
    99+
    2023-06-29
  • swoole协程的概念是什么
    本篇内容介绍了“swoole协程的概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!swoole协程是更加轻量级的线程,一个线程可以拥...
    99+
    2023-06-29
  • mapreduce的执行流程是什么
    MapReduce执行流程包括以下步骤: 输入数据划分:输入数据被划分成多个数据块,每个数据块包含若干个记录。 Map阶段:...
    99+
    2024-04-02
  • mongodb执行流程是什么
    MongoDB的执行流程主要包括以下几个步骤:1. 客户端发送命令:客户端向MongoDB发送命令,例如插入文档、查询数据等。2. ...
    99+
    2023-09-06
    MongoDB
  • swoole协程的适用场景是什么
    这篇文章主要介绍“swoole协程的适用场景是什么”,在日常操作中,相信很多人在swoole协程的适用场景是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”swoole协程的适用场景是什么”的疑惑有所帮助!...
    99+
    2023-06-29
  • swoole协程的调度方式是什么
    这篇文章主要讲解了“swoole协程的调度方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“swoole协程的调度方式是什么”吧!在swoole中,因为协程的切换是串行的,在同一个时间...
    99+
    2023-06-29
  • Golang函数的执行流程是什么?
    go 函数的执行流程如下:分配栈空间,存储局部变量和参数。压栈调用者信息,准备返回。设置局部变量。执行函数体(语句和表达式)。返回值(如果有)。恢复调用者信息。释放栈空间。控制权返回给调...
    99+
    2024-04-11
    golang 函数执行流程
  • mybatis框架的执行流程是什么
    MyBatis框架的执行流程大致如下: 加载MyBatis配置文件:MyBatis会读取并解析mybatis-config.xm...
    99+
    2024-04-02
  • PostgreSQL中执行sql的流程是什么
    小编给大家分享一下PostgreSQL中执行sql的流程是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、SQL执行流程PG执行SQL的过程有以下几个步骤:第一步,根据输入的SQL语...
    99+
    2024-04-02
  • swoole协程是进程还是线程
    今天小编给大家分享一下swoole协程是进程还是线程的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。swoole协程是属于线程...
    99+
    2023-06-29
  • java在jvm上的执行流程是什么
    Java在JVM上的执行流程如下:1. 编写Java源代码:首先,开发人员使用Java编程语言编写Java源代码。Java源代码是以...
    99+
    2023-09-26
    java jvm
  • python3 scrapy框架的执行流程是什么
    这篇文章主要讲解了“python3 scrapy框架的执行流程是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python3 scrapy框架的执行流程是什么”吧!scrapy框架概述:...
    99+
    2023-06-20
  • Java servlet执行的完整流程是什么
    本篇内容介绍了“Java servlet执行的完整流程是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • python协程调度的流程是什么
    1、asyncRun调用可以将协程放入事件队列中,loop是进入事件循环(也可称为调度器)的入口,loop调用将将线程控制权交给协程调度器。2、该调度器将在未来不断地从事件队列中提取协程或普通函数,然后执行和调度它们。在调度和执行过程中,这...
    99+
    2023-05-14
    Python
  • oracle窗口函数的执行流程是什么
    Oracle窗口函数的执行流程大致如下: 首先,确定窗口函数所应用的数据集,即确定数据集的排序顺序和分区方式。 接着,对数据...
    99+
    2024-04-09
    oracle
  • Android项目中gradle的执行流程是什么
    这篇文章主要介绍了Android项目中gradle的执行流程是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。gradle文件执行流程做过Android开发的同学都知道 ,...
    99+
    2023-06-29
  • MySQL查询语句执行流程是什么
    这篇“MySQL查询语句执行流程是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL查询语句执行流程是什么”文章吧...
    99+
    2023-07-05
  • MySQL之Join语句执行流程是什么
    本文小编为大家详细介绍“MySQL之Join语句执行流程是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL之Join语句执行流程是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Join语句执行流...
    99+
    2023-07-05
  • MyBatis注解CRUD与执行流程是什么
    这篇文章主要介绍了MyBatis注解CRUD与执行流程是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MyBatis注解CRUD与执行流程是什么文章都会有所收获,下面我们一起来看看吧。结果映射ResultM...
    99+
    2023-07-05
  • SpringMVC 执行流程
    SpringMVC 的执行流程 SpringMVC 框架 ​ SpringMVC 是一个基于 Java 的实现了 MVC 设计模式的请求驱动类型的轻量级 Web 框架,通过把 Model,View,...
    99+
    2023-09-04
    java 后端 mvc
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作