Closed LazyPlanet closed 8 years ago
我刚刚传了一个介绍sofa-pbrpc实现的PPT:doc/inside-sofa-pbrpc.pptx https://github.com/baidu/sofa-pbrpc/blob/master/doc/inside-sofa-pbrpc.pptx 。
每个RpcServer都维护了一个ServicePool,里面注册了各种service。你可以认为ServicePool是一个线程安全的service容器。 每个RpcServer还维护了一个ThreadGroup,其线程数可以通过work_thread_num配置来指定。每个ThreadGroup会关联一个boost asio的io_service(参见ThreadGroupImpl类的实现),以处理该io_service分派的各种事件。同时,io_service也作为构造参数传给RpcServerStream,这样网络连接与处理该连接上请求的ThreadGroup就关联起来了(线程模型图参见PPT第20页)。 需注意:原来的实现包括PPT中,每个RpcServer都只有一个ThreadGroup,即所有连接的请求处理共享一个ThreadGroup;而现在的实现通过IOServicePool维护了多个ThreadGroup,每个连接会选择与其中的一个ThreadGroup进行关联,选择策略采用round robin方式。这个不是我加的,不过我猜目的是为了提高性能。
所以:
如何保证大家都服务与一个io_service?在创建连接RpcServerStream的时候,构造函数参数传入同一个io_service。
如何保证多线程条件下,io_service不退出的?使用IOServiceWork(即boost::asio::io_service::work http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/reference/io_service__work.html ),具体参见ThreadGroupImpl::start()函数的实现。
希望我说明白了。
On Wed, Oct 19, 2016 at 10:39 AM, LazyPlanet notifications@github.com wrote:
Server底层是多个Service,Service下多线程? 作者如何保证大家都服务与一个io_service?并且如何保证多线程条件下,io_service不退出的? 多谢。
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/baidu/sofa-pbrpc/issues/126, or mute the thread https://github.com/notifications/unsubscribe-auth/AAgQPUNImR32bR5V_QtN4M-3cpohyeaUks5q1YLwgaJpZM4KagEF .
@qinzuoyan 这个附件的链接不对。https://github.com/baidu/sofa-pbrpc/blob/master/doc/inside-sofa-pbrpc.pptx
好的,非常感谢,我看到了。
梦想,是注定孤独的旅行……
在2016年10月19日 11:56,Zuoyan Qin 写道: 我刚刚传了一个介绍sofa-pbrpc实现的PPT:doc/inside-sofa-pbrpc.pptx https://github.com/baidu/sofa-pbrpc/blob/master/doc/inside-sofa-pbrpc.pptx 。
每个RpcServer都维护了一个ServicePool,里面注册了各种service。你可以认为ServicePool是一个线程安全的service容器。 每个RpcServer还维护了一个ThreadGroup,其线程数可以通过work_thread_num配置来指定。每个ThreadGroup会关联一个boost asio的io_service(参见ThreadGroupImpl类的实现),以处理该io_service分派的各种事件。同时,io_service也作为构造参数传给RpcServerStream,这样网络连接与处理该连接上请求的ThreadGroup就关联起来了(线程模型图参见PPT第20页)。 需注意:原来的实现包括PPT中,每个RpcServer都只有一个ThreadGroup,即所有连接的请求处理共享一个ThreadGroup;而现在的实现通过IOServicePool维护了多个ThreadGroup,每个连接会选择与其中的一个ThreadGroup进行关联,选择策略采用round robin方式。这个不是我加的,不过我猜目的是为了提高性能。
所以:
如何保证大家都服务与一个io_service?在创建连接RpcServerStream的时候,构造函数参数传入同一个io_service。
如何保证多线程条件下,io_service不退出的?使用IOServiceWork(即boost::asio::io_service::work http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/reference/io_service__work.html ),具体参见ThreadGroupImpl::start()函数的实现。
希望我说明白了。
On Wed, Oct 19, 2016 at 10:39 AM, LazyPlanet notifications@github.com wrote:
Server底层是多个Service,Service下多线程? 作者如何保证大家都服务与一个io_service?并且如何保证多线程条件下,io_service不退出的? 多谢。
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/baidu/sofa-pbrpc/issues/126, or mute the thread https://github.com/notifications/unsubscribe-auth/AAgQPUNImR32bR5V_QtN4M-3cpohyeaUks5q1YLwgaJpZM4KagEF .
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.
已经被改成md格式了: https://github.com/baidu/sofa-pbrpc/blob/master/doc/sofa-pbrpc-document.md PPT我直接附件传给你。
On Mon, Oct 24, 2016 at 10:06 AM, CaesarTang notifications@github.com wrote:
@qinzuoyan https://github.com/qinzuoyan 这个附件的链接不对。https://github.com/ baidu/sofa-pbrpc/blob/master/doc/inside-sofa-pbrpc.pptx
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/baidu/sofa-pbrpc/issues/126#issuecomment-255632922, or mute the thread https://github.com/notifications/unsubscribe-auth/AAgQPadgzpvgB7G751fYnGBIwVRDw3qSks5q3BKpgaJpZM4KagEF .
Server底层是多个Service,Service下多线程? 作者如何保证大家都服务与一个io_service?并且如何保证多线程条件下,io_service不退出的? 多谢。