gpt4 book ai didi

c - 如何在现代多核/多插槽机器上扩展 TCP 监听器

转载 作者:太空狗 更新时间:2023-10-29 17:08:33 26 4
gpt4 key购买 nike

我有一个用 C 编写的守护进程,需要同时处理 20-150K TCP 连接。它们是长期运行的连接,很少会中断。它们在任何给定时间传输的数据量非常小(很少超过 MTU,甚至......这是一种刺激/响应协议(protocol)),但对它们的响应时间至关重要。我想知道当前的 UNIX 社区正在使用什么来获取大量套接字,并最大限度地减少它们的响应延迟。我见过围绕多路复用连接到 fork 工作池、线程(每个连接)、静态大小的线程池的设计。有什么建议吗?

最佳答案

最简单的建议是使用 libevent , 它使编写符合您要求的简单非阻塞单线程服务器变得容易。

如果每个响应的处理都需要一些时间,或者如果它使用了一些阻塞 API(就像来自数据库的几乎任何东西),那么您将需要一些线程。

  • 一个答案是工作线程,您可以在其中生成一组线程,每个线程都监听某个队列以进行工作。如果您愿意,它可以是单独的进程,而不是线程。主要区别在于告诉员工该做什么的沟通机制。

  • 另一种方法是使用多个线程,并为每个线程分配 150K 连接中的一部分。每个服务器都有自己的进程循环,工作方式与单线程服务器类似,但监听端口除外,它将由单线程处理。这有助于在核心之间分散负载,但如果您使用阻塞资源,它会阻塞此特定线程处理的所有连接。

如果您小心的话,libevent 允许您使用第二种方式;但还有一个替代方案:libev .它不像 libevent 那样广为人知,但它特别支持多循环方案。

关于c - 如何在现代多核/多插槽机器上扩展 TCP 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1608939/

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