gpt4 book ai didi

multithreading - 让两个或多个线程在同一端口上监听的更好方法

转载 作者:行者123 更新时间:2023-12-03 11:59:53 26 4
gpt4 key购买 nike

亲爱的,

我目前正在处理网络服务器应用程序。我计划为每个服务器的核心处理一个客户端连接使用一个线程,以便更好地利用服务器的资源并获得更快的响应,避免阻塞等。

据我所知,有两种方法可以做到:

1)父进程打开监听套接字,每个线程监视它(epoll,kqueue等)是否有新连接,并对其进行accept()编码;

2)每个线程在相同的端口和地址(可能要感谢SO_REUSEPORT和SO_REUSEADDR)上打开自己的监听器套接字,监视它的新连接并对其进行accept()编码。

我不确定它是如何在后台运行的,但是我想这样做就像#2将委派给内核网络部分一样,负责通过线程分配客户端连接的任务。这是正确的吗?

两种方法之间有什么显着差异吗?在做某件事时是否有可能出错的事情,而在其他情况中却不会发生?我会以某种特定的方式而不是其他方式获得更好的结果(更少的资源使用,更少的等待时间等)吗?

我认为,通过比较才能看出两种方法之间的某些差异的唯一方法是生成大量连接,但是我的电脑性能较差,无法处理它。因此,我依靠您的经验和知识来获得此问题的答案。在此先感谢您的帮助。

最佳答案

1) parent process opens listening socket and each thread monitors it (epoll, kqueue, etc.) for new connections and accept() them;



您可以这样做,但是拥有一个 accept()线程和一个线程池并没有太多好处。而且,您将在接受线程之间进行竞赛,一次只能赢得其中一个(“打雷群”问题)。

2) each thread opens its own listener socket on same port and address (possible thanks to SO_REUSEPORT and SO_REUSEADDR), monitor it for new connections and accept() them.



除非您在Windows上,否则无法使用TCP进行此操作,据我所知,Windows上的语义是不确定的。

关于multithreading - 让两个或多个线程在同一端口上监听的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35168025/

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