gpt4 book ai didi

c++ - 可扩展的 UDP 服务器

转载 作者:太空狗 更新时间:2023-10-29 20:00:46 26 4
gpt4 key购买 nike

我需要制作一个服务器来监听和响应 UDP 数据包,它将监听 10 个端口。

数据包很小,不超过20字节。每个数据包都会修改或搜索到一个巨大的哈希表中。

但它必须每秒处理 15k 个数据包。

我可以使用 c、c++ 或 qt 进行开发。

是否有任何特殊准则需要满足此要求?使用的基本设计是什么?是否需要线程?

最佳答案

对于这种性能,我会考虑一个基于select() 的“换向器循环”:

  • 打开监听的UDP套接字
  • 调用select()确定有可读数据的套接字
  • 对于每个可读套接字,读取字节(非阻塞读取)
  • 当你得到一个完整的数据包时,处理(并根据需要编写)

您可以构建一个简单的表来调度 select() 结果。

这种方法将为您提供最佳性能,因为它尽可能接近操作系统调用,开销最小。它作为单个进程运行,最大限度地减少上下文切换并获得最佳缓存位置。

接下来,如果您发现事情受 CPU 限制,请考虑使用具有多个线程或进程的多个 CPU 核心的方法。例如,您能否让每个处理器处理 10 个套接字中的 N 个,并在共享内存中使用哈希表。

最后,我会小心使用大量线程(例如,大量线程工作池等)。在极端性能水平下,线程开销会变得很大。

关于c++ - 可扩展的 UDP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4975618/

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