C++ 在boost::asio中,为什么异步接受处理程序需要重新启动异步接受?

C++ 在boost::asio中,为什么异步接受处理程序需要重新启动异步接受?,c++,boost,asynchronous,tcp,boost-asio,C++,Boost,Asynchronous,Tcp,Boost Asio,在boost::asio(异步TCP服务器)教程中,类TCP\u服务器包含以下两种方法: void start_accept() { tcp_connection::pointer new_connection = tcp_connection::create(acceptor_.get_io_service()); acceptor_.async_accept(new_connection->socket(), boost::bind(&tcp_se

在boost::asio(异步TCP服务器)教程中,类
TCP\u服务器
包含以下两种方法:

void start_accept()
{
  tcp_connection::pointer new_connection =
    tcp_connection::create(acceptor_.get_io_service());

  acceptor_.async_accept(new_connection->socket(),
      boost::bind(&tcp_server::handle_accept, this, new_connection,
        boost::asio::placeholders::error));
}

void handle_accept(tcp_connection::pointer new_connection,
    const boost::system::error_code& error)
{
  if (!error) new_connection->start(); // ***

  start_accept();
}
我关心的是标有
***
的行。如果此操作需要很长时间才能完成,该怎么办?即使没有,在
***
线路和调用
start\u accept
之间也必须有一定的时间间隔,在此期间,服务器将无法接受传入连接。如果
async\u accept
注册一个在接受第一个连接时不会停止的操作系统处理程序,这不是更有意义吗?另外,这是一个真正的问题吗?我将如何解决它?

服务器不会“无法接受传入连接”;这就是函数的第二个参数在SocketsAPI中的作用。但是,服务器在处理客户机请求时可能会有延迟,这是正确的。需要大量计算的单线程应用程序将导致问题,因此,这个特定示例实际上只执行IO。如果您的服务器确实需要执行CPU密集型的操作,那么应该将处理程序传递给某种任务管理器