13、boost asio 教程---多线程执行,第二部分

在之前的课程中,我们学习了一种执行模型,其中您为相同的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_context>());
            guards.emplace_back(std::make_shared<work_guard_type>(contexts.back()->get_executor

猜你喜欢

转载自blog.csdn.net/Knowledgebase/article/details/132984473