- 博客(17)
- 收藏
- 关注
原创 内存泄漏检测
1.内存泄漏是C/C++特有的,比如C语言使用系统的api,实现对内存的分配。当使用malloc分配内存后没有使用free释放内存,就会导致内存泄漏,使堆空间越来越少。
2025-03-14 14:51:59
80
原创 池式组件(1)线程池
池式组件是一种常用的软件设计模式,旨在提高资源利用率和系统性能。通过维护一个资源对象的集合(即“池”),并根据需要向请求者分配和回收这些资源,从而避免了频繁创建和销毁资源所带来的开销。这些资源对象可以是线程、内存、数据库连接等。因此分为线程池、内存池、数据库连接池。
2025-02-27 12:30:00
1665
原创 池式组件(2)固定大小内存块的内存池
内存池是一种内存分配方式,也被称为固定大小区块规划。内存池是在真正使用内存之前,先申请分配一定数量的、大小相等的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。
2025-02-27 12:30:00
223
原创 用户态缓冲区
用户态缓冲区是指在用户空间中维护的缓冲区,用于临时存储数据以便搞笑地进行读写操作。用户态缓冲区位于用户空间中,与内核空间中的缓冲区(内核缓冲区)相对。用户进程通过系统调用访问系统资源时,需要在用户态和内核态之间进行切换。用户态缓冲区的使用可以减少这种切换的次数,从而提高性能。
2025-02-26 21:58:20
662
原创 无锁消息队列
无锁队列是一种不使用锁机制(如互斥锁或读写锁)来实现线程安全的数据结构。它通过复杂的原子操作(如CAS操作)来确保多线程环境下的正确性和一致性。无锁队列允许多个线程在没有锁的情况下进行并发操作,避免了锁机制带来的性能开销和潜在的死锁问题。在并发编程中,blocking(阻塞),lock-free(无锁),wait-free(无等待)是三种不同同步机制。
2025-02-26 17:05:05
322
原创 kv存储(2):使用数组实现kv存储
在上篇文章中,实现了kv存储的网络部分,能够简单的进行收发数据。在这篇文章中,将利用数组来实现一个具有基本功能的kv存储。实现SET,GET,MOD,DEL,EXIST五种功能。先创建数组,创建内存空间与销毁内存空间的函数在主函数文件封装好。1.在主程序中创建命令语句,上下顺序一一对应。3.创建新的kvs_arrays.c文件,实现每个功能函数。2.在头文件中创建数组。4.在主函数文件中调用功能函数。
2025-01-26 20:26:45
113
原创 key-value 存储(1):网络实现
Key-Value存储,即KV存储,是一种利用Key做索引来实现数据的存储、修改、查询和删除功能的数据存储方式。本文分别利用reactor和协程ntyco来实现kv存储中网络io部分。将网络封装好,只暴露出一个接口,在用户层主程序调用封装好的网络接口。在主程序中定义一个kvs协议,首先简单设置协议发送服务器接收到的数据。设计好的网络接口应该有两个参数,kvs协议和监听端口号。直接将原网络程序的主函数修改成外部接口即可。
2025-01-25 22:56:56
330
原创 网络编程(4)POSIX和网络协议栈(1)
POSIX(Portable Operating System Interface of UNIX)可移植操作系统接口。是由IEEE(电气电子工程师学会)发布的为要在各种UNIX操作系统上运行的软件而定义的一系列API(应用程序接口)标准总称。Unix和Linux都遵循POSIX这个标准,其次苹果的操作系用也是Unix-based的。有了这个规范,就可以调用通用的API,Linux提供的POSIX系统调用在Unix上也可以执行。如今Win10系统也支持Linux的POSIX。
2025-01-22 14:24:59
1069
原创 基于DPDK的用户态协议栈(2)基于DPDK实现UDP的数据接收
在DPDK中,EAL(Environment Abstraction Layer,环境抽象层)它为用户空间的应用程序提供了一个与底层硬件和操作系统交互的接口。初始化EAL是DPDK应用程序启动时的首要任务,初始化成功后才可以进行后续的配置步骤。rte_pktmbuf_pool_create是DPDK中用于创建专门用于储存数据包内存缓冲区(mbuf)的内存池。mubf是DPDK用于表示和处理网络数据包的基本数据结构。创建一个mbuf内存池,用于存储接收到的数据包。一、使用DPDK实现UDP的数据接收流程。
2025-01-11 11:02:02
727
原创 基于DPDK的用户态协议栈(1)DPKD简介及环境配置
DPDK(Data Plane Development Kit)是一个由Intel主导开发的,主要用于高性能数据包处理。绕过了Linux网络协议栈,直接在用户空间中对数据包处理过程,以减少数据包处理的延迟和提高吞吐量。Linux内核将DPDK应用程序看作是一个普通的用户态进程,包括它的编译、连接和加载方式和普通程序没有什么两样。DPDK程序启动后只能有一个主线程,然后创建一些子线程并绑定到指定CPU核心上运行。
2025-01-06 21:48:59
795
原创 网络编程(2)io多路复用(select、poll、epoll)
在上一篇文章中,实现了一请求一线程的模型。其优点是代码简单,容易实现。但是在高并发的情况下,该模型就很难达到所需的并发量。此时我们就需要采用io多路复用的模型,来实现高并发。I/O多路复用的核心思想是通过一种机制,使得程序可以同时监视多个I/O事件,并在其中的一个或多个I/O事件就绪时,通知应用程序进行相应的处理。它允许一个进程或线程同时监听多个文件描述符的I/O事件,并在fd准备就绪时(可读可写)进行处理。
2025-01-05 16:25:11
1316
原创 网络编程(1)网络io与一连接一线程
我的理解是监听socket类似于公共的,客户端请求连接时先经过监听socket。当客户端完成请求,要与服务段连接时,创建一个连接socket,这个连接socket则是一个私人的socket,只服务于该客户端。每个socket都有一个唯一的文件描述符,用于标识该socket在进程中的位置(或者说是端点)。在Linux操作系统中文件描述符(fd)是用来表示打开文件(包括设备、通道、socket等)。连接socket的作用是从监听队列中接收一个连接请求,并返回一个新的socket描述符(clientfd)。
2025-01-01 16:27:49
748
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人