提升async_read_some并非完全异步

时间:2012-06-18 06:54:13

标签: c++ boost boost-asio shared-ptr boost-thread

这是我的服务器代码:

socket_.async_read_some(boost::asio::buffer(data_read.data(), Message::header_length),
    boost::bind(&TcpConnection::handle_read_header, shared_from_this(),
    boost::asio::placeholders::error));

如果我在循环中写下以下代码

boost::thread::sleep(boost::posix_time::seconds(2));

在'handle_read_header'函数中,由上面的'async_read_some'调用,整个线程一直等到睡眠结束。因此,当另一个请求进入时,它将在睡眠结束前处理。是不是假设异步处理每个请求?我是boost和C ++的新手。如果我提到任何错误,请告诉我。

1 个答案:

答案 0 :(得分:3)

async_read_some的线程中实现了使用io_service::run()进行的预定读取。 如果你只有一个线程它将等待完成一个读处理程序,然后再开始另一个

您可以通过使用io_service::run()运行更多线程来创建线程池,或者使读取处理程序的执行更短。