百度brpc初步分析

最近在QQ群听说百度的brpc非常好,所以下载研究一下。

首先,它的文档写的非常用心,要点个赞。

里面有个brpc_intro.pptx用搞笑且浅显易懂的方式来做介绍,非常合我心意。

闲话少说,下面转入正题。

brpc代码量有点大,没时间细看,粗略看了一下代码,感觉有些地方有改进空间。

下面描述一下

大量代码在int main()中调用了

server.RunUntilAskedToQuit()

它的实现如下

void Server::RunUntilAskedToQuit() {
    while (!IsAskedToQuit()) {
        bthread_usleep(1000000L);
    }
    Stop(0/*not used now*/);
    Join();
}
这实际上相当于浪费了一个线程来做无意义的事,此处差评

然后看Server::StartInternal,从下面这段红色代码可以感觉出对线程的用法设计有缺陷,至少是没那么完善

        // Wait until all created bthreads finish the init function.
        for (size_t i = 0; i < ncreated; ++i) {
            while (!init_args[i].done) {
                bthread_usleep(1000);
            }
        }
        // Stop and join created bthreads.
        for (size_t i = 0; i < ncreated; ++i) {
            init_args[i].stop = true;
        }

        for (size_t i = 0; i < ncreated; ++i) {
            bthread_join(init_args[i].th, NULL);
        }
 

时间有限,先喷这些,上面这两个问题在corelooper中完美解决了

brpc在很多方面做的都是非常好的,有些功能和corelooper想到一块去了,比如用http服务来展示运行状态。

另外,corelooper打算在整理好后开源

到时欢迎大家点评。

阅读更多

没有更多推荐了,返回首页