基于协程的kv存储

项目背景:

        协程是一种轻量级的线程,可以在一个线程中创建多个协程,协程通过让出自身的控制权来实现协程之间的切换,当有事件就绪时,再恢复到之前的状态继续执行,协程之间的切换是在用户态之间进行的,性能开销更小。同时,协程的处理逻辑是比较偏向同步编程,做到了同步编程方式下实现异步的性能。

项目描述:

        使用协程处理客户端的连接请求和io操作,通过接收的命令进行用户态协议解析,并发处理对服务端的kv存储引擎的增删改查,实现了同步编程模式下拥有异步编程的效率。

        项目架构主要由网络层、协议层和核心层组成,网络层使用协程进行客户端的请求和io操作,协议层使用dpdk来实现在用户态空间进行协议解析。核心层是进行数据存储的引擎,使用红黑树进行存储。

项目流程:

        1.单线层多协程:将每一个网络连接创建一个协程,单列模式下由一个调度器对协程进行切换,底层逻辑由epoll实现。

        2.协程的创建:将每一个端口的连接创建一个协程,入口函数处理socket连接,此后io操作(recv、send)等进行异步处理。

        3. Hook重定向:每个协程在进行io操作之前,通过hook重定向到自定义的io函数,函数内部将协程io的socketfd加入到调度器底层实现的epoll中,让出CPU(yield),处理其它准备就绪的协程io,待调度器resume给当前协程再执行io操作,实现异步效率。

        4. 原语操作:

                yield:协程让出CPU给调度器并保存协程的上下文,以便resume之后能够进行io操作。

                resume:调度器恢复执行某个准备就绪的协程。

        5. 应用层:程序对接收的数据进行协议解析,用红黑树实现kv存储引擎的增删改查,将获得的数据回发给客户端。

参考连接

https://xxetb.xetslk.com/s/2fs2Vb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值