码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Swoole协程


    介绍

    从 4.0 版本开始 Swoole 提供了完整的协程(Coroutine)+ 通道(Channel)特性,带来全新的 CSP 编程模型。

    1. 开发者可以无感知的用同步的代码编写方式达到异步 IO 的效果和性能,避免了传统异步回调所带来的离散的代码逻辑和陷入多层回调中导致代码无法维护
    2. 同时由于底层封装了协程,所以对比传统的 PHP 层协程框架,开发者不需要使用 yield 关键词来标识一个协程 IO 操作,所以不再需要对 yield 的语义进行深入理解以及对每一级的调用都修改为 yield,这极大的提高了开发效率
    3. 提供了各种类型完善的协程客户端,可以满足大部分开发者的需求。


    协程可以简单理解为线程,只不过这个线程是用户态的,不需要操作系统参与,创建销毁和切换的成本非常低,和线程不同的是协程没法利用多核 cpu 的,想利用多核 cpu 需要依赖 Swoole 的多进程模型。

    什么是 channel

    channel 可以理解为消息队列,只不过是协程间的消息队列,多个协程通过 push 和 pop 操作生产消息和消费消息,用来协程之间的通讯。需要注意的是 channel 是没法跨进程的,只能一个 Swoole 进程里的协程间通讯,最典型的应用是连接池和并发调用。

    什么是协程容器

    使用 Coroutine::create 或 go 方法创建协程 (参考别名小节),在创建的协程中才能使用协程 API,而协程必须创建在协程容器里面,参考协程容器。

    协程调度

    这里将尽量通俗的讲述什么是协程调度,首先每个协程可以简单的理解为一个线程,大家知道多线程是为了提高程序的并发,同样的多协程也是为了提高并发。

    用户的每个请求都会创建一个协程,请求结束后协程结束,如果同时有成千上万的并发请求,某一时刻某个进程内部会存在成千上万的协程,那么 CPU 资源是有限的,到底执行哪个协程的代码?

    决定到底让 CPU 执行哪个协程的代码决断过程就是协程调度,Swoole 的调度策略又是怎么样的呢?

    • 首先,在执行某个协程代码的过程中发现这行代码遇到了 Co::sleep() 或者产生了网络 IO,例如 MySQL->query(),这肯定是一个耗时的过程,Swoole 就会把这个 Mysql 连接的 Fd 放到 EventLoop 中。

      • 然后让出这个协程的 CPU 给其他协程使用:即 yield(挂起)
      • 等待 MySQL 数据返回后就继续执行这个协程:即 resume(恢复)
    • 其次,如果协程的代码有 CPU 密集型代码,可以开启 enable_preemptive_scheduler,Swoole 会强行让这个协程让出 CPU。

  • 相关阅读:
    [数据可视化] 南丁格尔玫瑰图
    项目失败的原因有哪些?项目经理可以用项目管理软件监控项目
    薯条和洱海:第十五周马克思主义原理第八章:社会主义百年历史进程课程B站讲课大纲:
    Linux环境下Vivado和HLS功能测试
    A133P EC200M模块调试
    网络编程扩展
    FreeRTOS入门教程(空闲任务和钩子函数及任务调度算法)
    记录窗体关闭位置(从窗体上次关闭的位置启动窗体)
    QT开发知识点
    第六章 图 七、最短路径(BFS算法、Dijkstra算法、Floyd算法)
  • 原文地址:https://blog.csdn.net/MrWangisgoodboy/article/details/126022938
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号