- 博客(20)
- 收藏
- 关注
原创 Linux c++ 2.2.1 tcp的实现
维度内容主要作用创建一个套接字对象,返回文件描述符,用来后续接收客户端的链接。三个参数domain(协议族)、type(服务类型)、protocol(具体协议,多数为0)核心产出一个通信端点,可以是 TCP、UDP、原始包、本地通信等不同形态。后续配合bindlistenacceptconnectsendrecv等系统调用。角色核心函数作用客户端connect()触发三次握手的开始(发送 SYN 并等待完成)。服务端listen()使内核准备好接收连接请求(不参与握手报文,是前置条件)。服务端。
2026-04-25 13:02:44
329
原创 reactor
Reactor 是解决 C10K/C1000K 问题的标准模式。它通过事件多路复用和非阻塞 I/O,使得一个线程能够管理成千上万个连接,避免了传统多线程模型的内存爆炸和上下文切换开销。同时,它将业务逻辑与网络 I/O 分离,让开发者可以专注于协议实现,而底层的高性能并发由 Reactor 框架保证。在代码中,mainepoll_wait是 Reactor 的心脏;accept_cbrecv_cbsend_cb是负责具体 I/O 的肢体;ws_requesthandshark、编解码函数则是业务大脑。
2026-04-23 19:20:16
303
原创 Linux c++ 2.1.3 reactor和百万并发
非阻塞 I/O + epoll 的编程需要你手动维护每个连接的状态(读半包、写半包、缓冲区管理)。稍不注意就漏掉某个事件,或者重复读取,导致死循环或数据错乱。Reactor 把这些底层状态管理封装进框架,开发者只需要填回调逻辑。Epoll中,rbuffer容量为1024,如果一次发的数据超过1024,那么存不下来。简单说:传统的“一个连接一个线程”模式,在成千上万的并发连接面前会崩溃。返回一堆就绪的文件描述符,你得自己判断是读事件、写事件、新连接还是错误。Reactor核心:不同的io,对应不同的回调。
2026-04-22 11:13:50
306
原创 epoll的原理
epoll 是 Linux 下高性能网络编程的基石:它通过事件驱动、红黑树和就绪链表等机制,完美解决了 C10K 问题。三个核心函数(epoll_ctlepoll_wait)构成了 epoll 的基本骨架,理解它们是掌握 epoll 的关键。LT 和 ET 是 epoll 的两种触发模式:LT 简单可靠,适合大多数场景;ET 高效,适合高并发场景。epoll 的高效源于其内核实现的精巧设计:红黑树用于快速查找,就绪链表用于直接获取就绪事件,回调机制避免了无效轮询。
2026-04-07 08:34:13
383
原创 11.协程的概念
有好友列表,聊天窗口,右上角的加号。同时好友列表里面有很多个好有,这些好友统一封装成一个库,设置一个接口。讲述了携程的概念、应用场景及实现原理,重点分析了同步与异步编程的区别,通过多个代码示例演示了携程如何结合IO操作实现高效的并发处理,并讲解了基于`setjmp/longjmp`和`ucontext`实现携程切换的技术细节。说白了,同步就是我去点菜,这个厨师做好了,我才能去找下一个厨师要菜。保存当前位置,切换到目标位置,执行完以后,再回来。异步就是我问第一个厨师,做好了端走,没做好直接去问下一个。
2026-03-24 21:08:36
302
原创 10KCP学习
调用`ikcp_recv()`从已排序的接收队列(`rcv_queue`)中读取拼装好的完整报文。在`ikcp_update()`被调用时,从发送队列取出数据,进行分片和封装(添加KCP头)。将原始数据传递给`ikcp_input()`接口,KCP在此解析数据。2丢了,就算后面的都发到了,也得跟着2一起重传一次,有点浪费时间。a到b到c,到b的信息丢了。调用底层`sendto`接口将数据包通过UDP发送出去。调用`ikcp_send()`将用户数据放入发送队列。将封装好的数据包放入发送缓存(待确认)。
2026-03-23 16:36:13
374
原创 POSIX api 与 网络协议栈
本视频讲述了Linux网络编程中的POSIX API及其在TCP连接建立、数据传输和断开过程中的应用,详细解析了socket、bind、listen、accept、connect、send、receive、close等系统调用的实现机制与使用方法,并结合三次握手、四次挥手、滑动窗口、拥塞控制等核心概念进行深入讲解。课程概述 POSIX API 概述 Socket 原理详解 Bind 函数作用 Listen 函数详解 三次握手流程 Accept 函数机制 Send 与 Receive 数据传输 MTU 与数据
2026-03-22 10:07:34
334
原创 Linux c++ 第7章 lambda表达式
编程序时,需要用到一些函数,这些函数只用一次,而为了这些只用一次的函数而专门写一大段代码很麻烦,所以有了lambda表达式。其实就是低配版版的函数。
2025-10-25 20:19:24
1620
原创 Linux c++ 第六章 右值引用
右值引用有两个目的,一个是触发移动构造,另一个是完美转发。什么事左值?左值就是在内存中有正式编制的公务员,在内存中有自己的工位,并且这个工位只属于自己。什么是右值?右值就是在内存中没有编制的劳务派遣,在内存中颠沛流离,朝不保夕,随时都会消失。在实际工作中,程序执行时会使用大量的临时空间来存储临时数据,相当于让劳务派遣干活。每一次生成这些临时空间都会消耗时间,那么有没有什么办法给劳务派遣画大饼,让他们多白干一会活呢?这里就要使用到右值引用。
2025-10-25 18:56:43
731
原创 Linux c++第五章 智能指针
一、作用传统指针管理起来非常的麻烦,极易内存泄漏(申请一块内存空间,指针却丢了),重复释放(已经释放一块内存了,后面还要释放这一块)等各种情况。所以引入智能指针,归根结底就是为了方便。二、智能指针类型:auto ptr 现在已经不用了。share ptr,weak ptr, unique ptr三种。share ptr内部有两个东西,一个是指向实际内存的指针,另一个是记录指向该地址的指针的数量的计数器,count。
2025-10-24 16:03:11
602
原创 Linux c++学习 第三章 stl库(其一)string容器
头文件set主要包括set和multiset(两者方法相同,所以以下只用set举例)两个容器,分别是“有序集合”和“有序多重集合”,即前者的元素不能重复,而后者可以包含若干个相等的元素,两者都会将其容器内的元素从小到大自动排序。C++中的string类相当于是字符数组,但是其更方便于我们的操作,而且不需要在输入之前初始化字符数组的容量,节省空间。为了保证效率,元素的增删一般应该在末尾进行。pair相当于将两份数据打包成一对,两份数据的数据类型任意,多与其他容器混合使用,单独使用的情况比较少。
2025-10-20 23:21:34
426
原创 Linux c++ 第三章(其一) 结构型设计模式 单例模式
调用结束时,——instance会失效,但是new Singleton();会继续存在,导致内存泄漏。此时还有线程安全问题,如果第一个线程new成功,此时切换到第二个线程,将会产生问题。这种模式只适合过去单线程的计算机,如今多核的情况下可能会执行1、3、2.导致_instance内部什么都没有。在调用结束时,会自动调用该函数。感觉单例模式是目前最难的模式,目前版本四和六理解不了。后续使用的时候应该能逐渐理解。定义:保证一个类仅有一个实例,并提供一个该实例的全局访问点。删除_instance,并释放内存。
2025-10-04 21:12:27
323
原创 程序员记录梦境
旁边有一个男的说你先选,你不要的我谈。跟另一个人吃嘴子,等我真的要做些什么的时候,我醒了。认识一个女生,好像就是刚开始在远处眺望我的那个,也好像不是,记不清。在我跟人聊天室路过,一双大长腿很吸引人,我183,她能到我额头顶。忘记因为什么,我搬到一个地方,跟宫崎骏电影里的那种场景一样,起风了加天空之城。到的时候一女生在远处眺望着我,我也没多想。最后说让我哥给我把ps5邮寄过来,我收到的却是一台ps4slim和一台ps4pro。之前我做过好几次类似的梦,总是在真正做些什么的时候醒。一个是青梅,一个应该是天降。
2025-10-04 09:15:08
110
原创 Linux c++学习第二章 创建型设计模式
然后依次把vector容器里的所有终端的show功能全部调用,把计算的数据(temper)输入进去。每个儿子都写好后,通过父类指针,指向子类对象,就可以调用各个儿子准备的节目了。如果有新儿子表演新节目,直接继续创建儿子类,重载爹定下的表演节目即可。使用场景:某个品牌动物园,有一套固定流程,但是其中有若干个表演子流程可以创新替换,以尝试迭代更新表演流程。定义出终端类,只定义显示功能(虚函数),不写具体的实现,由子类,也就是各种终端设备来实现。(核心)*******活动调用活动策略,活动策略调用具体折扣。
2025-10-03 23:54:15
1249
原创 深度学习 线性回归
csv_data = np.array(ori_data[1:])[:,1:].astype(float) #裁剪完,从字符型转为浮点型。# 取相应的行,所有的列,同时转为张量tensor 通过self,使得其他函数也能使用该变量。# 取相应的行,所有的列,同时转为张量tensor 通过self,使得其他函数也能使用该变量。# 取相应的行,所有的列,同时转为张量tensor 通过self,使得其他函数也能使用该变量。ori_data = list(csv.reader(f)) #转成列表。
2025-10-03 15:24:07
314
原创 # Java学习第一天
Java学习第一天Markdown学习标题三级标题字体helloworld!helloworld!helloworld!helloworld!引用这话我虽然没说过,但却是在理。 ——鲁迅分割线图片超链接超链接列表qwer表格直接右键插入王之力熟练1.去音乐会Kazusasetsuna塔塔开代码publicSystem.out.hellow...
2021-12-21 13:59:08
201
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅