gRPC C++ 源码剖析(一)----------入门

通过一段时间阅读gRPC c++的源码,对其实现原理算是初窥门境了。

在这里通过一系列循序渐进的文章把其中的经验和学习到东西分享出来,希望志同道合之人能够共同交流进步。

gRPC c++源码难吗?

个人认为gRPC c++源码算是质量比较高的源码了,google工程师们的抽象和设计能力都能够在其中有所体现。

可是阅读其源码还是有不少困难的,个人认为造成源码阅读困难的原因有以下几个:

  1. 是用C++写的

出于性能和灵活性的考虑,gRPC的核心代码是用C++写的,其中有部分代码还是C的。最新的gRPC代码已经将大部分C代码用C++重写了。

如果对C++语言不熟悉的话,就很容易被gRPC所使用的很多C++语言特性所迷惑,而不得其要旨。比如模板,智能指针,继承多态等等。

2.很多高级的抽象

gRPC的源码为了简化异步代码的编写,同时为了更好的代码复用。设计了许多高级的数据结构。如grpc_closure,grpc_closure_scheduler,ExecCtx,grpc_combiner,grpc_completion_queue等。如果不能很好地理解这些高级数据结构的作用和原理,阅读起代码来也会事倍功半。

3.大量的设计模式

为了提供跨平台能力,grpc核心代码采用了bridge设计模式,因此可以看到各种vtable,这也为阅读源代码增加了困难。

4.异步编程

grpc核心库采用reactor设计模式,如grpc_closure就是为了方便异步编程而设计的数据结构。

5.高性能

出于性能考虑,gRPC还使用了无锁队列这种高级数据结构,不熟悉其原理的读者可能会陷入各种原子操作的细节中。

阅读gRPC源码有哪些收获?

其实上面阅读源码的困难也就是收获,如何高效地在C中进行异步编程,如何抽象数据结构和使用设计模式,如何编写高性能代码,如何使用C++的高级特性等等。

说了这么多,是不是已经跃跃欲试了呢?让我们从下节开始吧!