繁体   English   中英

C ++中的简单多线程服务器?

[英]Simple multithreaded server in C++?

我想编写一个简单的服务器应用程序,它将从客户端应用程序获取命令并在单独的线程中运行这些命令。

在dlib中查看服务器类 有没有人有使用它的经验? 它与使用Boost的Asio相比如何?

Boost Asio很容易做到这一点。 看一下Highscore教程的示例,该教程展示了如何将Boost用于多线程的异步输入/输出。

#include <boost/asio.hpp> 
#include <boost/thread.hpp> 
#include <iostream> 

void handler1(const boost::system::error_code &ec) 
{ 
  std::cout << "5 s." << std::endl; 
} 

void handler2(const boost::system::error_code &ec) 
{ 
  std::cout << "5 s." << std::endl; 
} 

boost::asio::io_service io_service; 

void run() 
{ 
  io_service.run(); 
} 

int main() 
{ 
  boost::asio::deadline_timer timer1(io_service, boost::posix_time::seconds(5)); 
  timer1.async_wait(handler1); 
  boost::asio::deadline_timer timer2(io_service, boost::posix_time::seconds(5)); 
  timer2.async_wait(handler2); 
  boost::thread thread1(run); 
  boost::thread thread2(run); 
  thread1.join(); 
  thread2.join(); 
}

我会先尝试不使用线程。 我会从libevent开始。 您会发现libevent模型非常简单,并且比按请求模型生成线程更好地扩展 如果libevent无法处理你的用例,总会有Erlang!

异步I / O在很多方面比每个客户端的线程模型更好。 最佳性能实际上是通过每个线程的线程实现的,每个线程都执行异步I / O.

请注意,您的“多线程服务器”概念虽然并非完全错误,但与其他人使用该词组的含义完全不同。 通常,它表示每个连接一个线程,而不是对跨线程并行化的一个连接的响应。

您要求的示例只是单线程同步服务器+并行计算的组合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM