优化Linux套接字

Xzo*_*rax 2 c++ sockets performance multithreading boost

我想问一些关于优化linux socket的问题.我尝试使用boost和简单的linux套接字来制作多线程负载均衡器.负载均衡器的工作原理与这些步骤一样简单:

  1. 一个请求进来,tcp监听器将接受一个套接字,只需说它clientSocket并创建一个新线程
  2. 当线程启动时,它会创建一个后端套接字,只需将serverSocket称为后端服务器(服务)
  3. serverSocket建立之后,我产生了一个新的线程来从serverSocket读取并将数据/响应发送到clientSocket
  4. 对于主线程,我调用一个将从clientSocket读取并发送到serverSocket的函数
  5. 当这两个插座中的一个变为无效时,工作人员将关闭两个插座并死亡

我也使用来自使用epoll的ting库的Waitset来使recv方法处于阻塞模式,这样它就会等到发生事件然后从套接字读取数据.

问题是当我用AB测试负载均衡器时,-n 10000 -c 100 -k,结果非常令人失望.我只有~1600 tps.我试着记录每个请求的请求时间,但结果很好.每次往返得到<1000微秒/ 1毫秒.

但是当我记录传入的请求间隔时,下一个请求处理的当前请求大约> 5000微秒/ 5毫秒.也许任何人都可以建议一个更好的解决方案来优化套接字操作?谢谢.

Sam*_*ler 6

你使这个过于复杂.每个连接的线程不会超出简单的示例,请阅读C10K问题以获取更多详细信息.

我建议您阅读有关负载均衡器的Boost.Asio库.它epoll(4)在Linux系统上用于异步事件多路分解,并且比每个连接的线程更好地扩展.