自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 反射实现无侵入式序列化

由于 cpp 还未提供反射,所以一般项目里序列化里需要实现对应类的序列化,不仅繁琐还容易出错,使用宏也并没有本质差别,都是侵入式的序列化。

2022-12-17 21:54:47 415 3

原创 分布式kv存储

注册中心作为服务治理框架的核心,负责所有服务的注册,服务之间的调用也都通过注册中心来请求服务发现。注册中心重要性不言而喻,一旦宕机,全部的服务都会出现问题,所以我们需要多个注册中心组成集群来提供服务。本项目中,通过 raft 分布式共识算法,简单实现了分布式一致性的 KV 存储系统,对接口进行了封装,并且提供了 HTTP 接口和 RPC 接口。为以后注册中心集群的实现打下了基础。

2022-12-11 12:46:17 1199

原创 服务订阅与通知

本篇将讲解框架的发布/订阅功能,这是框架的核心功能之一。发布者可对订阅相同主题的消费者主动推送消息,实现了系统解耦,易于维护。并且通过实时的发布/订阅模式实现自动维护服务列表,当订阅的服务发生了变化,同时更新自己的服务地址缓存。接口介绍客户端可发起对 key 的订阅,这样在服务端发布消息时可以及时收到消息,并且执行回调函数。回调函数的签名为void(Serializer),在回调函数里可以反序列化服务器发布的数据并处理。** * @brief 订阅消息 * @param[in] key 订阅的ke

2022-05-30 08:59:59 501 5

原创 go style协程设计

参考了鲨鱼哥的 librf ,实现了go style的协程。加上Channel,使用起来已经很接近go了。先看一下使用样例int main() { // 创建一个 Channel Channel<int> chan(1); // 开启一个协程往 Channel 里发送数据 Go { for (int i = 0; i < 10; ++i) { chan << i; LOG_DEB

2022-04-04 13:46:56 355

原创 关于c++属性的一些想法

[[path:"/handle"]][[method: Method.POST]]void handle([[Bean]] Json json) {....}由于c++是采用静态反射,不能运行时注入,想了想感觉可以从编译期生成注册代码来实现?等有template for后可以这样实现://通过静态反射获取方法和属性的映射map<Function, Attr> methodIntrospector=...;// template for生成编译期代码,运行时注册templat

2022-03-07 20:16:22 440

原创 rpc连接复用设计

本篇将探讨rpc连接多路复用与多路分解的设计思路与实现。本系列的相关文章如果没有看的可以先看一下,后面会用到相关的知识。通用协程同步原语设计C++高性能协程RPC框架设计问题分析对于短连接来说,每次发起rpc调用就创建一条连接,由于没有竞争实现起来比较容易,但开销太大。所以本框架实现了rpc连接复用来支持更高的并发。连接复用的问题在于,在一条连接上可以有多个并发的调用请求,由于服务器也是并发处理这些请求的,所以导致了服务器返回的响应顺序与请求顺序不一致。为了识别请求,我们很容易想到一个方法,就是

2022-03-06 21:45:21 3191

原创 通用协程同步原语设计

本框架实现了一套协程同步原语来解决原生同步原语带来的阻塞问题,在协程同步原语之上实现更高层次的抽象——Channel用于协程之间的便捷通信,本文简单介绍一下如何设计。我们都知道,一旦协程阻塞后整个协程所在的线程都将阻塞,这也就失去了协程的优势。编写协程程序时难免会对一些数据进行同步,而Linux下常见的同步原语互斥量、条件变量、信号量等基本都会堵塞整个线程,使用原生同步原语协程性能将大幅下降,甚至发生死锁的概率大大增加!只有重新实现一套用户态协程同步原语才能解决这个问题。在开始实现之前我们先简单介绍一

2022-03-04 21:18:30 404 2

原创 从gcc源码浅谈constexpr

constexpr函数是如何在编译期执行的?constexpr函数局部变量以及循环是如何实现?constexpr if是什么原理?或许你有不少疑惑,但目前关于constexpr编译期的资料还比较少,本文笔者将从 gcc 的源码简单分析一下,以此来抛砖引玉,让更多的人加入到对constexpr的讨论中。我用的是最新的gcc 11源码,直接翻到gcc/gcc/cp/constexpr.cc,在这个文件里我们可以看到gcc是如何解析constexpr的。我们先介绍几个重要的数据结构tree是gcc内部的语法

2022-02-27 23:04:08 350

原创 C++高性能协程分布式服务框架设计

本项目将从零开始搭建出一个基于协程的异步分布式服务框架。

2022-02-02 15:33:44 4755 2

原创 modern c++函数修饰符,限定符,说明符总结

modern c++函数修饰符,限定符,说明符总结自c++11起,c++函数的修饰符增加了许多。在这里小小总结一下使用情况和使用顺序,以供参考。按下图顺序讲解inlineinline修饰符将函数声明为内联函数以便编译期优化。要注意的是在类内定义的成员函数将默认是内联的。virtual(修饰成员函数)将成员函数声明为虚函数实现多态。注意inline virtual,虚函数是可以被内联的,前提是虚函数没有表现多态的时候,也就是编译器知道你要调用哪个类的对象。void函数返回值,略。f函

2021-07-14 00:22:45 439

空空如也

空空如也

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

TA关注的人

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