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

标签 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 */ });
}

...

最佳答案

这很好。

请注意,如果您发布的任务会占用大量时间。

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

关于c++ - 使用相同的 Boost.Asio io_service 同步接受 tcp 连接并作为线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28263913/

相关文章:

c++ - 这到底是什么意思(C++ 函数指针)?

c++ - 比较两对整数的最有效方法

c++ - std::initializer_list 作为函数参数

c++ - 以 boost ublas 矩阵 matlab 样式插入数据

c++ - 用 clang 编译 c++ - 新手

c++ - 新建/删除导致访问冲突

C++11:为什么私有(private)成员模板可以在类外访问?

c++ - 用于稍后引用的 lambda 和函数的通用类型转换

c++ - boost::asio::steady_timer() vs sleep() 我应该使用哪一个?

c++ - 我在使用 boost::serialization 时遇到一个问题,我的代码在 linux 中运行良好,但在 windows 中遇到异常