自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

新人博主,多多关照

TOP5 院校硕士在读,会持续更新 Linux 下 C/C++ 后端技术栈,包括但不限于网络/基础组件/中间件等

  • 博客(14)
  • 收藏
  • 关注

原创 百度实习内推

百度实习生招聘内推开始啦,快来投递你心仪的职位吧。我的内推码:ISKVH9。全流程都可以帮忙跟进的。

2024-11-29 17:36:13 329

原创 VMware虚拟机无法联网ping不通

本人在测百万并发的时候,突然有一台虚拟机连不上网,把所有虚拟机重启之后居然都连不上网,也在网上查了不少博客,发现没有特别完整的解决方案,有些根本解决不了问题,所以本人整理了一下较为完整的虚拟机网络解决方案虚拟机版本:CentOS7.9。

2024-08-22 12:13:23 14582 8

原创 从源码看透 Ptmalloc:堆内存分配与释放的背后

本文深入剖析了 Ptmalloc(Posix Thread Memory Allocator),一个广泛应用于 glibc 的内存分配器源码,揭示了其背后的内存管理机制。文章首先介绍了 Ptmalloc 的核心结构与功能,包括 fastbin、unsorted bin、mmap 处理等内存池管理策略。接着,通过逐行解析 _int_free 等关键函数,详细解读了内存块的分配、释放及合并过程,展示了 Ptmalloc 如何高效处理内存碎片与并发操作

2024-09-20 17:57:39 1184

原创 剖析 MySQL 数据库连接池(C++版)

上次给大家介绍了线程池的实现,这次来介绍下 Linux 下数据库连接池的实现,以大家最为熟悉的MySQL为例,因为连接池总体实现还是较为复杂的,本次以一个开源框架的数据库连接池部分为例进行讲解。首先,服务器与数据库的交互是请求响应模式,通常所使用的是TCP 长连接,而 TCP 连接需要三次握手和四次挥手,并且每次连接都需要验证账号密码等,所以连接资源属于耗时资源,可以用连接池来复用连接。

2024-09-12 20:41:29 1478

原创 从0到1实现线程池(C语言版)

要实现线程池,首先要了解什么是线程?要说线程就不得不提进程,以 Windows 下 QQ 为例,当我们双击打开 QQ,便打开了一个 QQ 进程,进程可以简单的认为是程序的一次执行过程,是操作系统分配基本运行资源的基本单位,可以通过任务管理器查看每一个进程的资源(如 CPU、内存、磁盘、网络)使用情况。在 QQ 中,我们可以同时打字聊天、语音通话、下载文件等,在同一个进程 QQ 中,这些同时进行的任务就是由不同的线程来执行的。

2024-09-10 16:02:43 2233

原创 协程实现原理——以libco为例

协程是个很重要的概念,对于向我一样的在校生而言,或者对进程和线程比较熟悉,对协程一般不太理解,协程也确实不好理解,本篇文章希望以通俗易懂的方式讲述协程,并且以著名的libco为例,看看核心的协程实现代码。协程的概念非常不好理解,虽然网上文章众多,但大多数都给人一种云里雾里的感觉,对协程的理解也有一些不同的观点,我个人认为协程就是一种可以“暂停和恢复执行”的特殊函数。

2024-09-09 16:09:16 1185

原创 socket网络编程——原理(详细阐述)

Posix API(socket编程)原理详解

2024-09-07 19:18:30 1321

原创 用基于epoll的reactor网络模型实现websocket

上次用reactor实现了webserver,这次来实现WebSocket什么是 WebSocket 呢?WebSocket 是一种网络传输协议,可在单个 TCP 连接上进行全双工通信。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就可以建立持久性的连接,并进行双向数据传输。WebSocket 通过 HTTP 端口 80 和 443 进行工作,并支持 HTTP 代理和中介,从而使其与 HTTP 协议兼容。

2024-08-26 16:13:02 983

原创 HTTP基础知识详解

◼HTTP (Hyper Text Transfer Protocol),译为超文本传输协议◻是互联网中应用最广泛的应用层协议之一◻设计HTTP最初的目的是:提供一种发布和接收HTML页面的方法,由URI来标识具体的资源◻后面用HTTP来传递的数据格式不仅仅是HTML,应用非常广泛◼HTML(Hyper Text Markup Language):超文本标记语言◻用以编写网页。

2024-08-25 15:03:12 4143

原创 用基于epoll的reactor网络模型实现http server

最后再总结一下,webserver的核心代码就只有400行不到,在此基础上可以实现大多数的http请求功能,这个烂大街的C++项目之所以不受到面试官的欢迎,会因为确实比较简单,并且很多时候都不能称之为项目,更像是个demo,就算是网络层的实现,除了epoll之外,还可以用协程,io_uring,基于dpdk的用户态协议栈等,这些内容后续都会更新,将http认为是协议层,在此基础上比如说实现问卷调查等业务功能,才算是一个完整的项目。​ 清理:清空写缓冲区,状态重置为0,等待新的请求或关闭连接。

2024-08-25 14:06:42 1498

原创 实现基于epoll的reactor网络模型

后续会用这份 reactor 代码实现 http server(也就是C++选手熟知的烂大街的webserver)和 websocket server,后面还会更新知名的用 reactor 模型设计的网络库,如muduo等。它将数据从发送缓冲区写入到客户端套接字,并将套接字的事件重新设置为 EPOLLIN 以继续接收来自客户端的数据。reactor 将 io 管理,转变为事件管理,核心在于不同的 io 事件,对应不同的回调函数,先register(注册),后callback(回调)

2024-08-23 15:16:15 636

原创 IO多路复用(select/poll/epoll)——基础

本文主要介绍select/poll/epoll三大IO多路复用方法,主要介绍相关的函数使用。

2024-08-23 14:04:52 940

原创 socket网络编程——基础

使用套接字函数需要包含头文件 其实上述代码就是经典的一请求一线程模型,相比于大家所熟悉的IO多用复用,其实一请求一线程也不是一无是处,某种程度上来说是异步的,将IO就绪与IO收发数据分开,但是,一个请求就需要开一个线程,显然是很浪费资源的,并且 fd 也不好管理,如果有一种轻量级的线程就好了,也就是所谓的协程,这部分内容以后再详细讨论。

2024-08-22 19:04:59 1281

原创 4台虚拟机实现百万并发

百万并发对epoll来说是小菜一碟,问题在于如何解除所有系统限制,可以打开的文件数量限制和五元组的限制是所有人都会遇到的问题,NAT表溢出是比较独特的问题,这两份代码是可以跑到百万并发的(在物理机性能不要太低的情况下),每个人系统的独特限制可能会不一样,如果你出现了新的问题,可以在评论区留言讨论!

2024-08-22 13:53:33 686

空空如也

空空如也

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

TA关注的人

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