![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++后端开发
文章平均质量分 89
C++项目实战
::呵呵哒::
菜鸡一个
展开
-
13 协程设计原理与汇编实现
如何定义协程*(线程)enum{//运行的状态CO_NEW;//新建CO_READY;//就绪CO_WAIT;//等待CO_SLEEP;//睡眠CO_EXIT;//退出int coid;//id//上下文//入口函数void *arg;//入口函数的参数//独立栈(每个协程不影响)*共享栈//栈的大小//就绪队列//睡眠队列//等待队列//退出队列考虑用那些数据结构来表示这几个状态:100个coroutine//用队列20个ready//30个sleep//原创 2024-07-08 15:38:56 · 856 阅读 · 0 评论 -
12 基于UDP实现可靠传输——KCP协议
关于KCP,我们可以把它理解为我们自定义了一个可靠的传输协议,它的底层协议采用的UDP,对于UDP我们可以理解成,操作系统的协议栈,给我们提供的最小的一个传输单元。KCP是一个基于UDP实现的可靠传输协议,它在UDP的高效性基础上,通过引入类似于TCP的控制机制,如重传、拥塞控制、流量控制等,实现了数据的可靠传输。当选择了快速重传,发送端发送了1,2,3,4,5几个包,然后远端的ACK:1,3,4,5.当收到了ack3时,返端不需要等待RTO超时,直接重新发送。这样可以做到更快的重传,但对带宽的浪费更大。原创 2024-07-04 20:53:08 · 678 阅读 · 0 评论 -
11 UDP的可靠传输协议QUIC
发送方和接收方都会维护一个数据帧的序列,这个序列被称作窗口。发送方的窗口大小由接收方确定,目的在于控制发送速度,以免接收方的缓存不够大,而导致溢出,同时控制流量也可以避免网络拥塞。协议中规定,对于窗口内未经确认的分组需要重传.原创 2024-07-04 11:51:29 · 883 阅读 · 0 评论 -
10 Posix API与网络协议栈
POSIX是由IEEE指定的一系列标准,用于澄清和统一Unix-y操作系统提供的应用程序编程接口(以及辅助问题,如命令行shell实用程序),当您编写程序以依赖POSIX标准时,您可以非常肯定能够轻松地将它们移植到大量的Unix衍生产品系列中(包括Linux,但不限于此!如果你使用的某些Linux API没有标准化为Posix的一部分,那么如果你希望将来将该程序或库移植到其他Unix-y系统(例如MacOSX)。原创 2024-07-02 15:54:40 · 1056 阅读 · 0 评论 -
9 redis,memcached,nginx网络组件
课程目标:1.网络模块要处理哪些事情2.reactor是怎么处理这些事情的3.reactor怎么封装4.网络模块与业务逻辑的关系5.怎么优化reactor?read就是将东西从read buffer(读缓冲区)中读出。write就是将东西从write buffer(写缓冲区)中写入。对于客户端而言,怎么知道链接建立成功,主要通过connect返回值(三次握手时是否收到服务端的ack)上面函数都是同步io。,reactor是事件驱动。原创 2024-07-01 17:57:29 · 1069 阅读 · 0 评论 -
8 https服务器的实现
这个代码核心就是我们首先监听一个8000接口,然后再服务器上访问这个接口,会得到一些https头文件。之后我们定义该目录为http的根目录,然后就可以访问该目录下的html文件了。如果我们要做一个http服务器的话,我们要注意几点。然后我们回复一个html,再网页上显示。原创 2024-06-26 21:34:37 · 189 阅读 · 0 评论 -
7 reactor服务器模型
接上节课,上节课中,我们使用了epoll实现了同时监听多个文件描述符,是对IO的管理,也提到了reactor是对事件的管理,那具体来说是怎样的呢?reactor是事件驱动模型,也就是EPOLLIN/EPOLLOUT,同时,我们应该维护一种结构,对于每个fd,都应该有这样一种记录该fd相关的结构。再往后,为了提高处理能力,我们可以将clientfd相关的读写操作放到子线程去做,而主线程只负责appect等等,这就涉及到不同的网络编程模型,之后再谈。接收和发送回调同理。原创 2024-06-26 16:42:40 · 225 阅读 · 0 评论 -
6. C++网络编程-网络io与io多路复用select/poll/epoll
首先看看这个学习计划samba配置可以看这个。原创 2024-05-15 18:01:48 · 249 阅读 · 0 评论 -
分布式版本控制工具git
这就是我们一个完整的提交流程。我们再工作区写代码,然后我们可以通过git.add将修改的代码提交到暂存区,然后,通过git.commit将暂存区的东西提交到本地仓库,然后,通过git.push将本地仓库里的东西提交到远端仓库。原创 2024-05-13 21:32:12 · 884 阅读 · 0 评论 -
C++-Linux工程管理
假如我们有一个深度学习框架的部分工程列表,里面有超过40个互相调用的工程共同组成,一些用于生成库文件,一些用于实现逻辑功能。他们之间的调用关系复杂而严格,如果我想在这样复杂的框架下进行二次开发,显然只拥有它的源码是远远不够的,还需要清楚的明白这几十个项目之间的复杂关系,在没有原作者的帮助下进行这项工作几乎是不可能的。即使是原作者给出了相关的结构文档,对新手来说建立工程的过程依旧是漫长而艰辛的,因此CMake的作用就凸显出来了。原创 2024-05-13 11:22:29 · 915 阅读 · 0 评论 -
C++新特性-线程
下面以。原创 2024-05-08 21:07:47 · 695 阅读 · 0 评论 -
C++新特性
左值可以取地址、位于等号左边;而右值没法取地址,位于等号右边。int a = 6;a可以通过 & 取地址,位于等号左边,所以a是左值。6位于等号右边,6没法通过 & 取地址,所以6是个右值。int a_;A a = A();同样的,a可以通过 & 取地址,位于等号左边,所以a是左值。A()是个临时值,没法通过 & 取地址,位于等号右边,所以A()是个右值。可见左右值的概念很清晰,有地址的变量就是左值,没有地址的字面值、临时值就是右值。原创 2024-05-05 18:02:16 · 672 阅读 · 0 评论 -
C++设计模式-结构型设计模式
保证一个类仅有一个实例,并提供一个该实例的全局访问点。——《设计模式》GoF定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。——《设计模式》GoF为什么要有工厂模式,而不直接使用new?除了new,还有复杂构造流程要点解决创建过程比较复杂,希望对外隐藏这些细节的场景;比如连接池、线程池隐藏对象真实类型;对象创建会有很多参数来决定如何创建;创建对象有复杂的依赖关系;本质延迟到子类来选择实现;结构图。原创 2024-05-04 18:37:35 · 900 阅读 · 1 评论 -
C++设计模式-创建型设计模式
定义一个操作中的算法的骨架 ,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。——《 设计模式》 GoF某个品牌动物园,有一套固定的表演流程,但是其中有若干个表演子流程可创新替换,以尝试迭代更新表演流程;这个和上面定义差不多。要点最常用的设计模式,子类可以复写父类子流程,使父类的骨架流程丰富;反向控制流程的典型应用;父类 protected 保护子类需要复写的子流程;这样子类的子流程只能父类来调用;本质。原创 2024-05-03 17:11:13 · 1246 阅读 · 0 评论 -
C++中的数据结构与算法
红黑树的性质:1.每个结点是红的或者黑的2.根结点是黑的3.每个叶子结点是黑的4.如果一个结点是红的,则它的两个儿子都是黑的(红红不相邻)5.对每个结点,从该结点到其子孙结点的所有路径上的包含相同数目的黑结点对于一个红黑树的定义:注意这个nil指的是叶子节点,也就是那个隐藏的那个黑节点。//根节点//叶子节点} rbtree;原创 2024-04-27 20:19:27 · 214 阅读 · 0 评论