关于 Boost:asio 多线程的有关问题

关于 Boost::asio 多线程的问题
在www.boost.org的boost::asio库中有一个示例程序HTTP SERVER 3.

这个服务器是使用一个io_service 和一个线程池来调用io_service::run().

在server.cpp源文件中有这样一段函数:

void server::run()
{
  // Create a pool of threads to run all of the io_services.
  std::vector<boost::shared_ptr<boost::thread> > threads;
  for (std::size_t i = 0; i < thread_pool_size_; ++i)
  {
  boost::shared_ptr<boost::thread> thread(new boost::thread(
  boost::bind(&boost::asio::io_service::run, &io_service_)));
  threads.push_back(thread);
  }

  // Wait for all threads in the pool to exit.
  for (std::size_t i = 0; i < threads.size(); ++i)
  threads[i]->join();
}

意思应该是说启动指定个数的线程池,分别调用io_service_的run()函数然后等待所有异步操作都结束。
但我的问题是在并发运行的时候,为什么每来一个连接请求它都会去调用asyn_accept的函数呢。这个多线程到底是怎么体现出来的。




------解决方案--------------------
是线程池,不是多线程。

在异步信号发生时,注册的函数被触发。
触发是在调用run函数的线程内调用的。


可以把调用run的几个线程想像成几条吃包子的狗,吃完一个就会等下一个。
把async系列函数想成是包包子,
网络事件发生,就是包子包好了,扔过去,几条狗抢着吃。
------解决方案--------------------
探讨
引用:
是线程池,不是多线程。

在异步信号发生时,注册的函数被触发。
触发是在调用run函数的线程内调用的。


可以把调用run的几个线程想像成几条吃包子的狗,吃完一个就会等下一个。
把async系列函数想成是包包子,
网络事件发生,就是包子包好了,扔过去,几条狗抢着吃。


async的系列函数调用了run()的几个线程,这“几个”就是thread_pool_size_(线程池的数量)吗?
我的意思是如果线程池的数量设置成10,是否代表并发的情况下最多同时接收10个请求任务?