首页 > 解决方案 > Java:侦听具有更多线程的单个端口与侦听多个端口

问题描述

假设我有一个 Java 程序正在侦听端口 8001,消耗并从消息中完成一些工作
。该端口上的程序处理的位的吞吐量是否存在理论上的最大值?即,您将一个线程专用于该端口,您可以通过添加更多线程来监听该端口来进行扩展?您可以专用于该端口的线程数是否有限制?

现在,如果确实存在通过在特定端口上投入更多线程可以扩展多少的理论上的最大值,是否可以通过让程序监听额外的端口 8001 和 8002 并拥有 2 倍以上的线程来克服这个问题?您的程序现在可以处理两倍的请求吗?

或者端口与端口上的这些吞吐量是非发布的,即进入主机的比特吞吐量受 NIC 限制?

标签: javasocketsnetworkingnetwork-programmingport

解决方案


您可以在同一个套接字(***)上提供任意数量的并发连接。您可以为每个连接分配一个线程,但请记住,在 Java 中,每个线程消耗大约 2MB。

由于我们谈论的是扩展,因此添加线程并不会神奇地将内核添加到您的 CPU 中。

(***) 有一个理论上的限制,因为可能的 IP 地址的数量乘以可能的源端口的数量是有限的,但是在达到它之前你会用完内存。


推荐阅读