最近在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打算在整理好后开源
到时欢迎大家点评。