我正在使用RPC框架,我想使用多io_service设计来解耦执行IO(前端)执行RPC工作的线程的io_objects
(后端)。BOOST ASIO multi-io_service RPC框架设计RFC
前端应该是单线程的,而后端应该有一个线程池。我正在考虑一个设计,使前端和后端使用条件变量进行同步。但是,似乎boost::thread
和boost::asio
不会混淆--i.e。,似乎条件变量async_wait
支持不可用。我有一个关于这个问题的问题here。
我发现io_service::post()
可能用于同步两个io_service对象。我在下面附上了一张图,我只是想知道我是否正确理解了post
机制,并认为这是一个明智的实现。
不,我已阅读了大部分示例的源代码:D我的意思是单线程IO服务用于执行联网IO,以及具有多线程执行RPC的IO服务:D –
为什么选择此设计?有什么好处? –
只要不涉及具有非确定性复杂性的操作(如硬盘IO),单个线程就可以轻松地复用数千个连接的客户端。由于有问题的应用程序是一个复杂的事件处理引擎,RPC调用通常会写入磁盘。这是第一个原因,其次我想单元测试RPC服务,并且删除基于异步/基于套接字的IO可以大大简化这一点。 –