我应该使用多少线程来发送和接收java.nio数据?

时间:2016-11-28 07:42:29

标签: java scala java.nio.file

我正在创建一个包含许多学习机器的分布式系统。我需要在机器之间发送和接收数据,我使用java.nio来创建该网络。在一台机器上,我使用一个线程用于serversocketchannel来接收来自其他机器的数据,并使用每个数据包创建新线程来发送它。这意味着一个线程用于接收,多个线程用于在一台机器上发送。

但我遇到的问题是,由于一个线程处理接收,许多客户端在连接时将处于挂起状态。 我应该将其更改为一个线程处理接收和一个线程处理发送吗? 谢谢 P / s:我不想使用任何第三方框架。

1 个答案:

答案 0 :(得分:0)

如果网络中的发件人数多于收件人,那么显然有些发件人最终会等待。如果你的接收器多于发送器,那么显然有些接收器会空闲,因为几乎所有的发送器都可能一对一地连接到​​接收器。

我无法判断你应该做什么,因为我不知道你想要完成什么。

无论如何,接收器端使用的两种常见模式是:

  • 一个线程处理所有
  • 一个线程只处理接受连接并打开流,然后将实际工作与流委托给另一个线程(通常来自线程池,以防止在为每个连接创建新线程时可能发生资源耗尽)< / LI>