自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【kv存储】增量和存量持久化

存量持久化,即从现有的数据结构当中保存key-value键值对,在存量持久化的实现当中,我采用了二进制数据格式,而不是RESP,这是为了避免解析所产生的开销,试想如果存储的value非常大,如果还需要透过解析函数来恢复数据,将非常严重地拖慢系统性能。$5\r\nAlice\r\n ← 第三个元素:长度5,内容是"Alice"$3\r\nSET\r\n ← 第一个元素:长度3,内容是"SET"$3\r\n123\r\n ← 第二个元素:长度3,内容是"123"*3\r\n ← 数组有3个元素。

2026-02-05 23:23:38 232

原创 【kv存储】如何集成不同的网络架构

kvs_protocol函数的功能是:按照用户态kv存储协议来解析请求内容并且回发,这是分离网络io层的关键,网络架构层不需要考虑kv存储的用户态协议的实现、如何拆分键值对、用何种数据结构存储数据,比如在reactor.c当中,kvs_protocol就是kvs_handler。我们的目标是当网络io就绪的时候调用recv和send,但是如果网络io未就绪,则系统阻塞,我们必须先等待,协程的上下文切换可以让我们聪明地从这种等待当中脱身,现在我们同步的编程方式仍不变,但是在不同的上下文中切换。

2026-02-01 23:28:32 633

原创 基于epoll的TCP服务器实现

使用红黑树来管理全部需要监控的描述符(简称为整fd集)、双向链表来管理已就绪的描述符(就绪fd集),并且在事件就绪的时候由内核直接通知用户空间,避免不必要的内存复制。这里为了提升TCP服务器的性能,我们采用for循环创建多个端口(port+i),并且将这些端口与sockfd绑定,使用listen监听,再将这些端口的事件都会被加入epoll实例中。我们使用epoll_wait函数,当事件就绪的时候(EPOLLIN,EPOLLOUT)需要处理这些事件,指定timeout = 5,避免不必要的系统资源占用。

2026-01-18 17:36:31 282

原创 Mysql实战——二进制数据读写

Mysql提供了许多C API函数,借此我们可以使用实现一个客户端(位于NS)用于对mysql数据库进行读取和写入操作。

2026-01-16 21:36:08 358

原创 线程池的实现

现在我们置位后使用pthread_cond_broadcast函数将所有阻塞在条件等待的线程全部唤醒,这些线程就会关闭并且从链表中删去,相比于直接将pool实例中的工作队列和任务队列全部置为NULL,这样做才能避免内存泄漏的危险。工作队列当中定义了一个int terminate,作用是当线程中的工作已经完成,将其置位以打破循环退出。while(1)循环判断任务队列当中是否有任务,如果没有任务就阻塞等待(之前的pthread_cond_wait条件等待),有任务就执行任务。线程池是一个服务器的基础组件,由。

2026-01-16 17:26:44 328

原创 一文带你了解Reactor

一句话概括Reactor模式 = I/O多路复用+I/O非阻塞+事件循环,不同的I/O事件,执行不同的回调函数(Callback Function)。本文将分析Reactor模式的原理以及实现,并且基于此分析其相比于其他方法在高并发下的性能优势。

2026-01-13 17:39:54 578

空空如也

空空如也

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

TA关注的人

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