自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 协程库项目总结

对协程库项目的总结与思考。

2024-08-21 15:03:54 764 1

原创 Raft分布式存储

构建一种基于Raft一致性算法的分布式键值存储数据库,以确保数据的一致性、可用性和分区容错性参考文章:两万字长文解析raft算法原理视频:解析分布式共识算法之Raft算法本项目用Raft解决的问题一致性: 通过Raft算法确保数据的强一致性,使得系统在正常和异常情况下都能够提供一致的数据视图。可用性: 通过分布式节点的复制和自动故障转移,实现高可用性,即使在部分节点故障的情况下,系统依然能够提供服务。分区容错: 处理网络分区的情况,确保系统在分区恢复后能够自动合并数据一致性。

2024-08-12 23:11:58 993

原创 八股文随记

随手记录一些八股

2024-07-23 15:13:39 744

原创 C++知识要点总结笔记

总结c++语法、内存等知识。仅供个人学习记录用。

2024-07-14 20:07:21 3641 1

原创 协程库--5.hook模块

hook系统底层和socket相关的API,socket IO相关的API,以及sleep系列的API。hook的开启控制是线程粒度的,可以自由选择。通过hook模块,可以使一些不具异步功能的API,展现出异步的性能,如MySQL。注意:本篇提到的系统调用接口实际是指C标准函数库提供的接口,而不是单指Linux提供的系统调用,比如malloc和free就不是系统调用,它们是C标准函数库提供的接口。

2024-06-01 17:17:27 1396

原创 协程库--4.定时器模块

基于epoll超时实现定时器功能,精度毫秒级,支持在指定超时时间结束之后执行回调函数。项目地址《Linux高性能服务器编程》第11章对定时器有完整而详细地介绍,包括原理与代码实现,本文关于定时器的介绍与实现都是从这章摘抄的,目的只为了加深本人对定时器的理解。建议先阅读这章的内容,然后直接看sylar定时器的设计与实现,下面的定时器概述和几种定时器实现随便看看就好了。通过定时器可以实现给服务器注册定时事件,这是服务器上经常要处理的一类事件,比如3秒后关闭一个连接,或是定期检测一个客户端的连接状态。

2024-06-01 17:10:57 1015

原创 协程库--3.IO协程调度模块

继承自协程调度器,封装了epoll,支持为socket fd注册读写事件回调函数。项目地址IO协程调度还解决了调度器在idle状态下忙等待导致CPU占用率高的问题。IO协程调度器使用一对管道fd来tickle调度协程,当调度器空闲时,idle协程通过epoll_wait阻塞在管道的读描述符上,等管道的可读事件。添加新任务时,tickle方法写管道,idle协程检测到管道可读后退出,调度器执行调度。学习本章内容之前必须对sylar的协程模块和协程调度模块非常熟悉,参考协程库–1.协程介绍及其实现。

2024-05-31 22:30:49 1141

原创 协程库--2.协程调度模块

实现了一个N-M的协程调度器,N个线程运行M个协程,协程可以在线程之间进行切换,也可以绑定到指定线程运行。本章对应源码学习协程调度之前必须完全掌握sylar的协程模块,参考协程介绍及其实现实现协程调度之后,可以解决前一章协程模块中子协程不能运行另一个子协程的缺陷,子协程可以通过向调度器添加调度任务的方式来运行另一个子协程。协程调度最难理解的地方是当caller线程也参与调度时调度协程和主线程切换的情况,注意对照源码进行理解。当你有很多协程时,如何把这些协程都消耗掉,这就是协程调度。

2024-05-29 22:27:21 861 2

原创 协程库--1.协程介绍及其实现

参考重写sylar最简单的理解,可以将协程当成一种看起来花里胡哨,并且使用起来也花里胡哨的函数。每个协程在创建时都会指定一个入口函数,这点可以类比线程。协程的本质就是函数和函数运行状态的组合。协程和函数的不同之处是,函数一旦被调用,只能从头开始执行,直到函数执行结束退出,而协程则可以执行到一半就退出(称为yield),但此时协程并未真正结束,只是暂时让出CPU执行权,在后面适当的时机协程可以重新恢复运行(称为resume),在这段时间里其他的协程可以获得CPU并运行,所以协程也称为轻量级线程。

2024-05-28 22:31:44 1085

原创 Linux下C++轻量级Web服务器开发

本文主要总结Linux下C++轻量级Web服务器开发使用 线程池 + 非阻塞socket + epoll(ET和LT均实现) + 事件处理(Reactor和模拟Proactor均实现) 的并发模型使用状态机解析HTTP请求报文,支持解析GET和POST请求访问服务器数据库实现web端用户注册、登录功能,可以请求服务器图片和视频文件实现同步/异步日志系统,记录服务器运行状态经Webbench压力测试可以实现上万的并发连接数据交换基于github上万star开源项目TinyWebserver。

2024-05-24 20:43:14 743 1

原创 webserver--8.webserver

Web服务器的类定义,包含了很多成员函数和变量来实现服务器的各种功能。成员函数包括了一些初始化函数,线程池、数据库连接池、定时器等的相关操作函数。同时还包含了事件监听函数,读写事件处理函数,信号处理函数等,来实现服务器的功能。//最大文件描述符//最大事件数//最小超时单位public:public://基础int m_port;// 服务器监听的端口号// 网站根目录// 日志写入方式// 是否关闭日志// 使用的反应堆模型类型。

2024-05-17 16:10:58 1357

原创 webserver--7.数据库连接池

数据库连接池校验共两个个class,分别是connection_pool和connectionRAII二、connectionRAII类RAII(Resource Acquisition Is Initialization)即资源获取即初始化,是一种C++编程技巧,用于管理资源。connectionRAII类依托于connection_pool类,用于在函数执行期间自动申请连接和自动释放连接,避免了手动申请和释放资源出现的错误和异常情况;在创建connectionRAII对象时,它会自动调用conn

2024-05-16 22:22:04 1312

原创 webserver--6.同步/异步日志系统

阻塞队列类直接定义在.h头文件中并对方法直接进行实现public:// 构造函数exit(-1);// 在堆上动态分配了一个大小为max_size的数组m_array来存储队列元素m_size = 0;// 由于刚创建时队列为空,所以m_front和m_back初始化为-1// 清空队列中的所有元素// 由于这是一个多线程环境下的代码,所以需要使用互斥锁来保证多个线程之间对队列的操作是同步的,以避免出现竞态条件m_size = 0;// 析构函数。

2024-05-16 21:54:38 946 3

原创 webserver--5.定时器处理非活动连接

定时器类 util_timer,用于在事件循环中管理定时事件public:util_timer() : prev(NULL), next(NULL) {}// 构造函数,将prev和next成员变量初始化为NULLpublic:// 用于记录该定时器的超时时间,以time_t类型表示// 定时器超时时要调用的回调函数指针,该回调函数需要接受一个client_data*类型的参数// 回调函数使用的数据,通常是一个结构体指针// 双向链表中的前驱节点指针// 双向链表中的后继节点指针。

2024-05-16 21:41:28 993

原创 webserver--4.http连接处理

根据状态转移,通过主从状态机封装了http连接类。其中,主状态机在内部调用从状态机,从状态机将处理状态和数据传给主状态机包括头文件http_coon.h声明类的变量与方法、http_conn.cpp类的具体实现两个文件包括:构造函数threadpool()、析构函数~threadpool()以及append()方法、append_p()方法、worker()方法、run()方法二、声明与初始化1.http_conn类的声明2. 定义http响应的一些状态信息3.对文件描述符设置非阻塞 setn

2024-05-15 22:50:32 1217

原创 webserver--3.半同步半反应堆线程池

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

2024-05-15 21:51:43 1177

原创 webserver--2.线程同步机制封装类

从第二节开始,主要根据github上万star开源项目TinyWebserver,近乎逐行分析介绍源项目链接:link提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

2024-05-14 21:49:18 303 2

原创 webserver--1.前置知识

记录webserver的编写过程和问题,持续更新提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

2024-04-17 21:03:07 363

原创 Linux 网络编程相关知识

本文主要参照《TCPIP网络编程》尹圣雨、《Linux高性能服务器编程》游双、《Linux 高并发服务器开发》nowcoder等资料。将随着技术精进而不断补充。提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

2024-04-08 14:18:09 1178

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除