- 博客(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关注的人
RSS订阅