Crow:run的流程2 建立io_service及线程-CSDN博客
介绍了run的Crow会启动一个线程并用于处理do_accept。
那么do_accept本身是做什么的呢?
void Server::do_accept()
{if (!shutting_down_){uint16_t service_idx = pick_io_service_idx();asio::io_service& is = *io_service_pool_[service_idx];task_queue_length_pool_[service_idx]++;...}
}
用于根据当前处理任务的数量多少,从io_service池取出一个is,也就相当于是从线程池中取出一个线程(因为每个线程阻塞在一个io_service上)。
然后将增加该线程处理的任务数量。
void do_accept()
{if (!shutting_down_){...auto p = new Connection<Adaptor, Handler, Middlewares...>(is, handler_, server_name_, middlewares_