使用相同的Boost.Asio io_service同步接受tcp连接并作为线程池

时间:2015-02-01 14:43:18

标签: c++ c++11 boost boost-asio

使用io_service接受tcp连接以及作为服务连接客户端的线程池的以下方法是否有效,或者是否有一些警告?

io_service svc;
io_service::work work(svc);

// define the three threads in the io_service thread pool
thread t1( [&svc]() { svc.run(); } );
thread t2( [&svc]() { svc.run(); } );
thread t3( [&svc]() { svc.run(); } );

endpoint ep(ip::tcp::v4(), port);
acceptor acceptor(svc, ep);

while (true) {
  shared_ptr<socket> sock(new socket(svc));
  acceptor.accept(*sock);

  // post a task to the io_service
  svc.post( [sock]() {  /* do stuff on sock here */ });
}

...

1 个答案:

答案 0 :(得分:1)

这很好。

如果您发布阻止非常重要时间的任务,则需要注意。

异步IO操作都意味着非常短的执行时间。如果使用非IO任务阻塞服务线程,则IO任务将获得高(延迟)延迟