两次调用io_service :: run方法有什么影响

时间:2015-06-30 16:42:14

标签: c++ boost boost-asio

以下架构来自boost asio文档:

enter image description here

据我所知,如果我两次调用io_service::run方法(在两个独立的线程中),我会有两个线程从完成事件队列中通过异步事件多路复用器来解除事件,我是对的吗?

更确切地说,我怀疑是通过io_service::run方法的多次调用来实现并行化。例如,当处理套接字时,如果我有两个套接字绑定在同一个io_service object上,每个套接字调用socket.async_read_some方法,它是否涉及2个注册的回调(通过async_read_some方法)可以被称为concurently两次致电io_service::run时。

1 个答案:

答案 0 :(得分:4)

您的假设是正确的。调用io_service::run()的每个线程将并行地出列并执行处理程序(简单函数对象)。这当然只有在有多个事件源为io_service提供时才有意义(例如两个套接字,一个套接字和一个定时器,几个同时进行的post()调用等等。)

每次调用套接字async_read()都会导致一个处理程序在io_service中排队。只有一个线程将它出列并执行它。

注意不要一次多次调用async_read()每个插槽

相关问题