Home

protobuf之down_cast

C++ 提供了多种 cast 的方式:static_cast/dynamic_cast/const_cast/interpret_cast。 其中google代码规范明确表示了不建议使用RTTI,也就是尽量少使用dynamic_cast。本文介绍下 protobuf 里是如何使用down_cast替代dynamic_cast的。

Read more

AI时代 - 评《封神演义》

这两天终于听完了《封神演义》,非常感谢这本书,让我长期的霸占了微信读书好友排行版的第一名。 上一次看这本书,还是在大学本科,记得当时书皮已经被翻阅的不成样子,重新换了新的。纸张比较单薄,甚至微微发黄,看得出来经历了岁月,不知道已经被多少届师兄师姐们借阅。那时候看,纯粹为了热闹,看众仙家呼风唤雨,撒豆成兵,当时的感觉是科技在进步,什么千里眼、顺风耳,在如今都变成了现实,因为有了电话、视频。这次在路上听书,或许因为最近这两年AI火起来的原因,突然想到两个词:AI时代 和 基因突变,历史长河五千年一瞬而过,无数真相被遗忘,你无法真切的分辨清楚历史和小说。这个时代的幻想在当时或许都是现实。 或许上古是一个AI及其发达的时代,每件法宝都注入了 AI 程序,召之即来挥之即去。“急急如律令,激!...

Read more

如何基于protobuf实现一个极简版的RPC

基于 protobuf 的 RPC 可以说是五花八门,其中不乏非常优秀的代码例如 brpc, muduo-rpc 等。 protobuf 实现了序列化部分,并且预留了 RPC 接口,但是没有实现网络交互的部分。 本文想介绍下,如何实现基于 protobuf 实现一个极简版的 RPC ,这样有助于我们阅读 RPC 源码。 一次完整的 RPC 通信实际上是有三部分代码共同完成: protobuf 自动生成的代码 RPC 框架 用户填充代码 本文假设用户熟悉 protobuf 并且有 RPC 框架的使用经验。首先介绍下 protobuf 自动生成的代码,接着介绍下用户填充代码,然后逐步介绍下极简的 RPC 框架的实现思路,相关代码可以直接跳到文章最后。

Read more

boost容器之multi_index

之前介绍过bimap用于解决双向map的需求,类似于关系数据库里对多列建立索引。boost里的multi_index_container则继续扩充了这个特性,支持将多种container的接口合并到一块,想象下将std::vector和std::map合并到一个容器里组成一个新的容器,既支持数据的顺序写入,也支持k-v映射。 考虑实际应用场景,例如LRU cache,需要对数据hash和按照时间排序,实现上经常维护两个容器:hash_table和list,更新时保证两个container的一致性。而使用multi_index_container可以构造出同时具有hash_map和list接口的类,用户不需要关注底层的数据实现和一致性。 实际上,multi_index_contain...

Read more