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

原创 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
原创 用基于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关注的人