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

C++ 语言特性31 - 协程介绍(2)

一:协程是什么?

        如果你还不熟悉协程的概念,可以先将它理解为一种“更高级的函数”——它不仅能像普通函数那样被调用,还具备挂起与恢复执行的能力,从而更灵活地处理异步操作、数据生成和复杂流程控制。

二:为什么需要协程

       在程序设计的发展中,函数作为最基本的抽象单元,用于组织逻辑、管理流程和提升代码可维护性。然而,传统函数具备固定入口出口、线性执行、局部状态不保留等特点,限制了它在处理复杂场景时的表达能力。面对如数据生成器、异步并发、事件驱动状态机、游戏逻辑控制等需求,传统函数显得力不从心。这时,我们需要一种能够中断与恢复执行、保持状态的更强抽象 —— 协程(coroutines)。

        协程并非 C++20 的专利,其概念早在 1963 年就由Melvin Conway提出。他在关于编译器构造的论文中首次提出了“协程”这一术语,用于描述可以“交替执行”的两个过程。后来,计算机科学大师 Donald Knuth 评价说:“过程(procedure)其实只是协程的一种特例。”这表明在更高层次的抽象上,协程比传统过程更为灵活。此后,协程被广泛用于:

  • Simula(第一个面向对象语言);

  • Lua(以协程为核心特性的脚本语言);

  • Python(从 2.5 版本开始支持生成器和 yield,3.5 引入 async/await);

  • JavaScript(ES6 引入 generator,ES7 引入 async/await);

  • Rust、Kotlin、Go 等现代语言也纷纷引入协程模型;

       如今,C++ 终于在 C++20 中正式支持协程,将其纳入语言级支持,使得这一概念在性能和类型安全要求极高的系统编程领域也可广泛使用。

三:C++函数的演进过程

        自从 1972 年第一个 C 标准发布以来,我们就有了基本的函数,例如:func1

int func1() {return 1972;
}

        随着 1998 年第一个 C++ 标准的到来,函数变得更加强大,我们获得了:

  • 函数重载:func2

int func2(int arg) {return arg;
}double func2(double arg) {return arg;
}
http://www.dtcms.com/a/267711.html

相关文章:

  • 用 Turbo Vision 2 为 Qt 6 控制台应用创建 TUI 字符 MainFrame
  • Redis性能优化
  • 五、Python新特性指定类型用法
  • AI大模型(六)Langchain核心模块与实战(一)
  • 使用LVM和扩展文件系统增加root分区存储容量
  • 信号和槽(4)
  • 3dmax物理材质转换标准材质,物理材质转VR材质,VR材质转标准材质3dmax物理材质转标准材质插件
  • 98.验证二叉搜索树
  • python实现简单的地图绘制与标记20250705
  • 【每天一个知识点】子空间聚类(Subspace Clustering)
  • 零基础保姆级本地化部署文心大模型4.5开源系列
  • Unity文件夹标签 —— FolderTag
  • SpinLock (TTAS) C-A-S 自旋锁实现原理
  • 人工智能学习60-Yolo
  • TCP协议概念和特性
  • cmd 的sftp传输;Conda出现环境问题: error: invalid value for --gpu-architecture (-arch)
  • Kotlin 协程:Channel 与 Flow 深度对比及 Channel 使用指南
  • 《自然语言处理:基于预训练模型的方法》-笔记
  • Java教程——深入学习guava之并发编程
  • 基于matlab的二连杆机械臂PD控制的仿真
  • 2025年5月-植物水分吸收和运输优化算法water uptake and transport-附Matlab免费代码
  • 数字地和模拟地
  • 使用 C++/OpenCV 和 MFCC 构建双重认证智能门禁系统
  • 白皮解读——173页数据安全治理白皮书5.0【附全文阅读】
  • 灵活应对市场波动的智能运营中枢​
  • leetcode918.环形子数组的最大和
  • Spark SQL架构及高级用法
  • Java Go SDK 管理工具与最佳实践
  • 【汇编逆向系列】九、函数传参之结构体 - SHL、SHR指令,小型结构体参数和返回值
  • 《深度剖析:5G网络切片如何精准保障不同业务QoS需求》