C++ 可以使用boost::asio::thread_池而不是将boost::asio::io_上下文与boost::thread::thread_组组合使用吗?

C++ 可以使用boost::asio::thread_池而不是将boost::asio::io_上下文与boost::thread::thread_组组合使用吗?,c++,boost-asio,C++,Boost Asio,我正试图澄清我的一些困惑。我无意中发现,我认为可以使用某种方式自动组合boost::asio::io_上下文和boost::thread::thread_组like常常被建议(或)。看起来,这个特定于asio的池可以用于将任务发布到,但另一方面,一些网络类型,如resolver需要将对象io\u context作为构造函数参数传递给thread\u pool不是,也不是从中派生出来的。您应该将io\u context.run()发布到thread\u pool假设您有一个io\u context

我正试图澄清我的一些困惑。我无意中发现,我认为可以使用某种方式自动组合
boost::asio::io_上下文
boost::thread::thread_组
like常常被建议(或)。看起来,这个特定于asio的池可以用于将任务发布到,但另一方面,一些网络类型,如
resolver
需要将对象
io\u context
作为构造函数参数传递给
thread\u pool
不是,也不是从中派生出来的。

您应该将
io\u context.run()
发布到
thread\u pool
假设您有一个
io\u context
对象,命名为ioc

您可以创建多个线程,并在每个线程中调用
ioc.run()
。这是一个阻塞epoll/select/kqueue的阻塞操作。请注意,
ioc
是可共享的,通过在多个线程中调用
ioc.run()
,它们隐式地属于将由
ioc
使用的线程池。我们将此池称为
io\u threadpool

现在创建一个单独的线程池,名为
compute
,用于执行其他任务。以下是可能的情况:

  • 您可以在两个池中的线程中使用
    ioc
    (少数情况除外,如
    restart()
    ,这要求
    ioc
    未处于活动运行状态)

  • 您可以从任何线程进行同步I/O调用

  • 您可以从任何线程调用异步调用,如
    async\u read(…,handler)
    。但是,该处理程序仅在一个
    io_线程池
    线程中调用

  • 您可以在任一线程池中分派任务,但如果任务不执行任何I/O,我希望在计算池中分派任务会更有效,因为系统不必唤醒被阻止的
    epoll()
    /
    kqueue()
    /
    select()
    调用


所以。。。答案是否定的?是的,答案是否定的。您可以了解有关概念模型的更多信息。