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

Gui*_*e07 5 c++ boost boost-asio

以下架构来自boost asio文档:

在此输入图像描述

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

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

Ric*_*ges 4

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

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

请注意,每个套接字一次不要多次调用 async_read() 。