gpt4 book ai didi

c++ - 优化 Linux 套接字

转载 作者:太空狗 更新时间:2023-10-29 23:54:05 24 4
gpt4 key购买 nike

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

  1. 一个请求进来,tcp listener会接受一个socket,就说clientSocket,然后新建一个线程
  2. 线程启动的时候,会创建一个后端socket,只要说serverSocket给后端server(service)就可以了
  3. serverSocket 建立后,我生成一个新线程以从 serverSocket 读取并将数据/响应发送到 clientSocket
  4. 对于主线程,我调用一个函数,该函数将从 clientSocket 读取并发送到 serverSocket
  5. 当这两个套接字之一变为无效时,工作人员将关闭两个套接字并死亡

我还使用 ting 库中的 Waitset,它使用 epoll,使 recv 方法处于阻塞模式,这样它会一直等到事件发生,然后从套接字中读取数据。

问题是我用AB测试loadbalancer时,-n 10000 -c 100 -k,结果很失望。我只有 ~1600 tps。我尝试记录每个请求所花费的请求时间,但结果很好。每次往返 < 1000 微秒/1 毫秒。

但是当我记录传入请求间隔时,下一个请求从当前收到的请求开始处理大约 > 5000 微秒/5 毫秒。也许有人可以在这里提出更好的解决方案来优化套接字操作?谢谢。

最佳答案

你把它弄得太复杂了。每个连接一个线程不会超出简单的示例,请阅读 C10K problem了解更多详情。

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

关于c++ - 优化 Linux 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7928241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com