- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
亲爱的,
我目前正在处理网络服务器应用程序。我计划为每个服务器的核心处理一个客户端连接使用一个线程,以便更好地利用服务器的资源并获得更快的响应,避免阻塞等。
据我所知,有两种方法可以做到:
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.
关于multithreading - 让两个或多个线程在同一端口上监听的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35168025/
我是一名优秀的程序员,十分优秀!