- 博客(81)
- 收藏
- 关注
原创 Muduo库时间轮定时器的设计实现
这里,我们就用到了智能指针shared_ptr,shared_ptr有个计数器,当计数为0的时候,才会真正释放⼀个对象,那么如果连接在第10s进行了⼀次通信,则我们继续向定时任务中,添加⼀个30s后(也就是第40s)的任务类对象的shared_ptr,则这时候两个任务shared_ptr计数为2,则第30s的定时任务被释放的时候,计数-1,变为1,并不为0,则并不会执行实际的析构函数,那么就相当于这个第30s的任务失效了,只有在第40s的时候,这个任务才会被真正释放。无疑应该是第40s的时候。
2025-07-05 15:52:33
1012
原创 传输层协议TCP
接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送, 就会造成丢包, 继而引起丢包重传等等一系列连锁反应. 因此 TCP 支持根据接收端的处理能力, 来决定发送端的发送速度. 这个机制就叫做。机器掉电/网线断开: 接收端认为连接还在, 一旦接收端有写入操作, 接收端发现连接已经不在了, 就会进行 reset. 即使没有写入操作, TCP 自己也内置了一个保活定时器, 会定期询问对方是否还在. 如果对方不在, 也会把连接释放.
2025-07-05 12:17:02
1020
原创 项目前置知识技术点功能用例:timerfd的认识及使用
上边例子,是⼀个定时器的使用示例,是每隔3s钟触发⼀次定时器超时,否则就会阻塞在read读取数据这里。基于这个例子,则我们可以实现每隔3s,检测⼀下哪些连接超时了,然后将超时的连接释放掉。本篇文章介绍了定时器的基本使用,后边计划基于这个去实现时间轮,欢迎留言交流。这时候我们就需要⼀个定时任务,定时的将超时过期的连接进行释放。在当前的高并发服务器中,不得不考虑一个问题,那就是。
2025-07-05 11:36:50
248
原创 bRPC简介
互联网上的机器大都通过TCP/IP协议数据以什么格式传输?不同机器间,网络间可能是不同的字节序,直接传输内存数据显然是不合适的;随着业务变化,数据字段往往要增加或删减,怎么兼容前后不同版本的格式?一个TCP连接可以被多个请求复用以减少开销么?多个请求可以同时发往一个TCP连接么?如何管理和访问很多机器?连接断开时应该干什么?万一server不发送回复怎么办?RPC。
2025-07-04 21:20:27
933
原创 项目前置知识技术点功能用例:C++11中的bind
基于bind的作用,当我们在设计⼀些线程池,或者任务池的时候,就可以将将任务池中的任务设置为函数类型,函数的参数由添加任务者直接使用bind进行适配绑定设置,而任务池中的任务被处理,只需要取出⼀个个的函数进行执行即可。我们可以将bind接口看做是一个通用的函数适配器,他接受一个函数对象,以及函数的各项参数,然后返回一个新的函数对象,但是这个函数对象的参数已经被绑定为设置的参数。本篇文章介绍了c++11std::bind函数的相关使用,以及它对于后面我们项目里边实现任务池线程池的重要性。
2025-07-04 17:55:33
409
原创 仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器
HTTP服务器通过一段时间的学习,自己想着去实现一个高并发的服务器组件,目前暂时先不关注实际的业务内容。目前希望通过自己实现的高并发服务器组件,能够简洁快速的完成一个高性能的服务器的搭建;并且,通过组件内提供的不同应用层协议支持,也可以快速完成一个高性能应用服务器的搭建,比如提供HTTP协议组件的支持。
2025-07-04 16:46:54
894
原创 聊聊Kafka、RabbitMQ、RocketMQ 和 ActiveMQ 这 4 种消息队列
分区是 Kafka 读写数据的最小粒度,比如主题 A 有 15 条消息,有 5 个分区,如果采用顺序轮询的方式,15 条消息会顺序分配给这 5 个分区,后续消费的时候,也是按照分区粒度消费。由于分区可以部署在多个不同的机器上,所以可以通过分区实现 Kafka 的伸缩性,比如主题 A 的 5 个分区,分别部署在 5 台机器上,如果下线一台,分区就变为 4。:主题可以被分为若干个分区,同一个主题中的分区可以不在一个机器上,有可能会部署在多个机器上,由此来实现 kafka 的伸缩性。
2025-05-23 16:41:38
1077
原创 内存分配器ptmalloc2、tcmalloc、jemalloc,结构设计、内存分配过程详解
当用户请求的内存略小于某个空闲块时,分割后剩余的碎片会被标记为。
2025-05-14 22:24:36
1386
原创 【Linux系统】进程(上)
进程的退出状态必须被维持下去,因为他要告诉关⼼它的进程(⽗进程),你交给我的任务,我办的怎么样了。维护退出状态本⾝就是要⽤数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,换句话说,Z状态⼀直不退出,PCB⼀直都要维护?D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。R运⾏状态(running): 并不意味着进程⼀定在运⾏中,它表明进程要么是在运⾏中要么在运⾏队列⾥。
2025-03-31 18:13:40
699
原创 VSCode中出现“#include错误,请更新includePath“问题,解决方法
(2)如果头文件存在,在编译时提醒VSCode终端中"#include错误,请更新includePath",则表明需要更新项目的包含路径设置。本篇文章介绍了在VSCode中编写代码时遇到头文件有波浪线的问题,解决方案如上,欢迎评论交流!(3)VSCode按Ctrl+Shift+P,搜索。(5)路径问题解决,之后波浪线就消失了。),如果文件中包含注释,需要将其删除。文件是一个有效的 JSON 文件。(1)首先检查要引用的头文件。JSON 文件不支持注释()检查文件格式是否正确。(2)复制红框这一段。
2025-02-09 18:08:25
6990
原创 【linux/C++项目】从零实现一个高并发内存池(1)
这篇文章先对项目【高并发内存池】做了一个简单的介绍,会陆续更新后面的内容,欢迎评论和交流!
2024-12-16 17:59:57
675
原创 【linux系统】基础开发工具(git、gdb/cgdb使用)
本篇文章分享了关于linux环境下的基本开发工具,git以及gdb/cgdb的介绍。欢迎评论,分享交流。
2024-12-11 10:58:09
1336
原创 【linux系统】基础开发工具(gcc/g++、make/Makefile)
这篇文章介绍了linux下的基本开发工具,编译器gcc/g++、自动化构建-make/Makefile。欢迎评论交流。
2024-12-11 10:09:05
753
原创 【C++进阶】unordered_map和unordered_set的使用
这篇文章介绍了unordered_set/map系列的相关知识,欢迎大家评论交流!
2024-10-23 16:14:29
851
原创 【C++初阶学习】stack和queue
本篇文章介绍 了 priority_queue 类以及如何实现的相关知识,欢迎大家评论交流!
2024-08-30 17:25:42
1230
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1