在之前的课程中,我们学习了一种执行模型,其中您为相同的io_context类实例启动了N个线程。在这种情况下,io_context会为您进行负载平衡,您不需要关心下一个处理程序应该在哪个线程上执行。
还有另一种执行模型,其中您创建N对“1个io_context + 1个线程”。在这种情况下,每个线程都有自己的io_context类实例。请看下面的示例。这是一个io_context组包装器,它创建了所请求数量的io_context、工作保护和线程类实例。我们将在示例下面讨论这种执行模型。
#define BOOST_ASIO_NO_DEPRECATED
#include <boost/asio.hpp>
#include <thread>
namespace io = boost::asio;
using tcp = io::ip::tcp;
using work_guard_type = io::executor_work_guard<io::io_context::executor_type>;
using error_code = boost::system::error_code;
class io_context_group
{
public:
io_context_group(std::size_t size)
{
// 创建io_context和工作保护对
for(std::size_t n = 0; n < size; ++n)
{
contexts.emplace_back(std::make_shared<io::io_c
本文深入探讨了Boost Asio的两种多线程执行模型,一种是单个io_context配合多个线程的负载均衡模型,另一种是每个线程拥有独立io_context的模型。后者无需额外同步,但绑定的IO对象不能跨io_context,可能导致单个核心过载。开发者需要根据应用场景选择合适的执行模型和平衡策略。
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



