【问题标题】:Java: listening to a single port with more threads vs listening to multiple portsJava:侦听具有更多线程的单个端口与侦听多个端口
【发布时间】:2019-01-27 23:50:23
【问题描述】:

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

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

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

【问题讨论】:

  • 不,没有理论上的最大值。
  • @user207421 所以我可以通过在端口上抛出更多线程来扩展。无需将流量拆分到其他端口以增加主机可以服务的请求数量?
  • 是的,很明显。
  • @user207421 哦,好吧,这对我来说并不明显,因此问题

标签: java sockets networking network-programming port


【解决方案1】:

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

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

(***) 有一个理论上的限制,因为可能的 ip 地址数乘以可能的源端口数是有限的,但是在到达之前您会耗尽内存。

【讨论】:

  • 在同一个端口。
  • @Mateusz Stefek 我指的是进入同一端口的位数。例如,如果我的主机通过 1GB 以太网连接,那么主机是否有可能从单个端口消耗多达 1GB 的空间?
猜你喜欢
  • 1970-01-01
  • 2021-10-28
  • 2013-09-24
  • 2013-08-30
  • 2022-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
相关资源
最近更新 更多