首页 > 编程语言 >C/C++ stackful 有栈协同程式的一些缺点。

C/C++ stackful 有栈协同程式的一些缺点。

时间:2024-11-04 11:46:35浏览次数:3  
标签:协同 协程 C++ 有栈 协同程序 CSDN 博客 stackful

在阅读本文之前,可以先查阅本人以下其它文章:

C++ 20标准协同程序(协程)基于编译器展开的 stackless 协程。_协同编译具体-CSDN博客

C/C++ 如何正确的切换协同程序?(基于协程的并行架构)_c++怎么切换运行程序-CSDN博客 

关于 Go 协同程序(Coroutines 协程)、Go 汇编及一些注意事项。_go coroutine-CSDN博客

stackless or stackfull 协同程式(协程)?_boost stackless-CSDN博客 

灌水玩玩 ChatGPT AIGC生成的有栈协同程序实现(例子)_任务协同 aigc-CSDN博客 

C/C++ 11/14/17 有栈式协同程式的基础框架类库【关于】_c++11 协程-CSDN博客 

关于 C/C++ 1Z(17)开源项目 openppp2 协同程式切换工作流-CSDN博客 

C/C++ 协同程式切换潜在存在的一些致命性风险问题_go[=] 协程卡死 c++-CSDN博客 

基于 C/C++ stackful 有栈协同程式,存在以下缺点,在采纳该架构的协程时,人们应当谨慎评估其风险性。

基于有栈协同程序:

1、需要为每一个协同程序分配独立的栈空间。

2、每个协程,需要确保其调用堆栈(计算堆栈)分配,不会超过分配的栈空间大小。

3、为了可读性,几乎不存在有人单独 “外挂协程计算堆栈空间”,略微类似于 golang。

4、需要单独步入测试,函数调用链所需要的最大栈空间大小,并给予一定额度。

5、不可采用递归类实现,只可以采纳非递归(略复杂)方式,解决类似如树、归纳等。

6、编程时需要注意函数、结构嵌套及圈复杂度,C几乎不会遇见,在 C++ 中会变复杂。

7、基于编译器优化时,或会带来一定的不确定性,它与第六条是联合并存的一个问题。

      处理不好,会带来类似:总线错误、段错误的致命性疑难杂症问题。

8、不可产生遗漏及错误的 #PC/EIP 的流程切换问题,否则易产生死线(deadline)问题。
9、代码临界区处理的安全性问题,否则容易产生死锁(deadlock)的问题。

10、合理管控协同程序的膨胀数量,否则宿主机(母机)内存不一定能够承受过多的负载。

stackful 有栈协同程序,在 C/C++ 之中最大的优点是兼容性,在所有的操作系统平台都可以实现它,并且不限制 C/C++ 的编译器版本。

例如:C/C++ 11、14、17、20、22 等,这是好事儿,兼容性很强,但缺点也很明显,使用的复杂度及安全风险性问题会高很多,所以协程架构需要一个 C/C++ 很有经验的人作为,IA基础设施架构师来负责承建工程并且为它提供运行时可靠性保证。

一个好的建议是参考并学习研究本人的网络基础设施开源工具:openppp2liulilittle/openppp2: PPP PRIVATE NETWORK™ 2 VPN Next Generation Reliable and Secure Virtual Ethernet Access Solution!

这是一个由 C/C++ 17 编译器标准构建的 C/C++ stackful 应用程序,它拥有高效的协同程式切换效能,或许会是一个很好的:多核编程有栈协同程序实战性质 Refer 解决方案项目。

当多个线程及协同程序工作时,并承担高负荷的计算及交换压力时,内存负载表现,当然受限于不同的应用场景,内存负载略有不同,但大多数应用程式并不需要多大的内存负载,如果内存占用过多,人们可以仔细思虑是否整体架构及实现存在问题。

服务器:(AMD EPYC 7402P/1C)

 

客户端:(INTEL ATOM X5-Z8300/4C)

标签:协同,协程,C++,有栈,协同程序,CSDN,博客,stackful
From: https://blog.csdn.net/liulilittle/article/details/143479265

相关文章

  • C++语言的起源。哪些程序是C++编写的?为什么早期VC++对ANSI C89之后的标准支持不好?
    C++语言的起源C++最初被称为带类的C,兼容C的语法,此既是C++得以流行的前提,也是C++某些语法被捆绑的根源。C++的++来源于C语言的递增运算符,代表增加,意义为扩展。BjarneStroustrup博士在做博士论文写代码的时候,遇到一些困难,发现Simu......
  • 【C++】reference to ‘prev‘ is ambiguous:std 命名空间冲突引发的编译错误
    问题描述C++代码编译错误:usingnamespacestd;usingll=longlong;constintN=1e6+7;llprev[N];原因分析在C++的标准库中,std命名空间包含一个名为std::prev的函数,该函数用于获取容器中的前一个迭代器。在上述代码中,通过usingnamespacestd;语句,所......
  • 【C&C++】C4996 ‘fopen‘: This function or variable may be unsafe. Consider usin
    问题描述在使用VisualStudio编译运行C/C++程序时,编译器返回警告信息。FILE*file;file=fopen("file.csv","w+");编译器返回的警告信息如下:C4996 'fopen':Thisfunctionorvariablemaybeunsafe.Considerusingfopen_sinstead.Todisabledeprecation,......
  • 【C++练习】判断成绩是否恰好有一门不及格
    题目:判断成绩是否恰好有一门不及格描述:编写一个程序,输入学生的语文和数学成绩,判断该学生是否恰好有一门课不及格(不及格的标准是成绩低于60分)。如果恰好有一门课不及格,则输出1;如果没有课程不及格或者两门课都不及格,则输出0。输入:输入两个整数,分别表示语文成绩和数学成绩。......
  • 【C++练习】收集瓶盖赢大奖
    题目:收集瓶盖赢大奖描述:某饮料公司最近推出了一个“收集瓶盖赢大奖”的活动:如果你拥有10个印有“幸运”、或20个印有“鼓励”的瓶盖,就可以兑换一个神秘大奖。现分别给出你拥有的印有“幸运”和“鼓励”的瓶盖数,判断是否可以去兑换大奖。输入:一行,包含两个整数,分别是印有“......
  • C和C++介绍
    C语言介绍C语言是一种通用的高级编程语言,由DennisRitchie在1972年开发。它以其高效性和灵活性广泛应用于系统编程和嵌入式系统。C语言提供了对底层内存的直接访问能力,支持过程化编程,并且具有丰富的标准库。C语言版本及内存管理特性版本发布年份新特性/改进内存......
  • 南沙C++信奥赛陈老师解一本通题 1230:寻找平面上的极大点
    ​ 【题目描述】在一个平面上,如果有两个点(x,y),(a,b),如果说(x,y)支配了(a,b),这是指x≥a,y≥b;用图形来看就是(a,b)坐落在以(x,y)为右上角的一个无限的区域内。给定n个点的集合,一定存在若干个点,它们不会被集合中的任何一点所支配,这些点叫做极大值点。编程找出所有的极大点......
  • 【C++篇】跨越有限与无限的边界:STL之set容器中的自我秩序与无限可能
    文章目录C++`set`容器详解:秩序与高效的数据管理前言第一章:C++`set`的概念1.1`set`的定义1.2`set`的特点第二章:`set`的构造方法2.1常见构造函数2.1.1示例:不同构造方法2.2相关文档第三章:`set`的常用操作3.1插入操作详解3.1.1使用`insert()`插入元素3.1......
  • C++——文件操作
    在C++编程中,文件操作是一个重要的组成部分,它允许程序读取、写入和处理文件数据。为了执行文件操作,C++提供了一系列的类和函数,这些都包含在标准库的<iostream>和<fstream>头文件中。目录一、I/O流二、文本文件1.写文件2.写文件三、二进制文件1.二进制读写操作四、C++......
  • (2)---【C语言】【GL库】【计算机图形学】DEV C++ 平台openGL库 下的画线图案设计 房
     上篇上手实践  运行结果  实现代码#include<windows.h>#include<GL/glut.h>#defineGLUT_DISABLE_ATEXIT_HACK//处理不同系统宏//星状结构函数,添加了几何中心坐标,半径,叶片宽度占比,叶片数量--------------------------------//绘制内部星状结构基本元素的......