java.nio 我应该使用多少个线程来发送和接收数据?
How many thread should I use to send and receive data with java.nio?
我正在创建一个包含许多学习机器的分布式系统。我需要在机器之间发送和接收数据,我正在使用 java.nio 创建该网络。在一台机器上,我为 serversocketchannel 使用一个线程从其他机器接收数据,并为每个数据包创建新线程来发送它。意思是在一台机器上一个线程接收,多个线程发送。
但我面临一个问题,因为一个线程处理接收,许多客户端在连接时会挂起。
我是否应该将其更改为一个线程处理接收,一个线程处理发送?
谢谢
P/s:我不想使用任何第 3 方框架。
如果您的网络中的发送者多于接收者,那么显然有些发送者最终会等待。如果您的接收者多于发送者,那么显然有些接收者会空闲,因为几乎所有时间发送者都可能一对一地连接到接收者。
我无法判断你 "should do" 因为我不知道你想要完成什么。
无论如何,接收方常用的两种模式是:
- 一个线程处理所有
- 一个线程只处理接受连接和打开流,然后将流的实际工作委托给另一个线程(通常来自线程池,以防止为每个连接创建新线程时可能发生的资源耗尽)
我正在创建一个包含许多学习机器的分布式系统。我需要在机器之间发送和接收数据,我正在使用 java.nio 创建该网络。在一台机器上,我为 serversocketchannel 使用一个线程从其他机器接收数据,并为每个数据包创建新线程来发送它。意思是在一台机器上一个线程接收,多个线程发送。
但我面临一个问题,因为一个线程处理接收,许多客户端在连接时会挂起。 我是否应该将其更改为一个线程处理接收,一个线程处理发送? 谢谢 P/s:我不想使用任何第 3 方框架。
如果您的网络中的发送者多于接收者,那么显然有些发送者最终会等待。如果您的接收者多于发送者,那么显然有些接收者会空闲,因为几乎所有时间发送者都可能一对一地连接到接收者。
我无法判断你 "should do" 因为我不知道你想要完成什么。
无论如何,接收方常用的两种模式是:
- 一个线程处理所有
- 一个线程只处理接受连接和打开流,然后将流的实际工作委托给另一个线程(通常来自线程池,以防止为每个连接创建新线程时可能发生的资源耗尽)