【发布时间】:2013-03-19 06:54:59
【问题描述】:
我正在用 Java 编写一个程序,我在一个线程上打开了 256 个网络连接。每当套接字上有任何数据时,我都应该读取它并进行处理。目前,我正在使用以下方法:
while true
do
iterate over all network connections
do
if non-blocking read on socket says there is data
then
read data
process it
endif
done
sleep for 10 milli-seconds
done
有没有更好的方法在 Java 上做同样的事情?我知道 C/C++ 中有一个 poll 方法。但是在谷歌搜索之后,我没有得到关于 Java 轮询的具体想法。有人可以解释一下吗??
【问题讨论】:
-
只是一个想法……一个进程的 256 个网络连接是不是有点过多?
-
您可以为每个网络连接创建一个阻塞读取线程。这样你就不会遍历连接(我认为它是由操作系统完成的)并且线程会在数据到达时唤醒(不再需要睡眠)。
-
@Quirliom 程序需要它。我无法减少连接数。
-
@Burkhard 这将使编程模型复杂化。当 Linux 内核已经提供阻塞 + 轮询原语时,我不想在这件事上投入太多时间。
-
线程是如何唤醒的?连接会自动唤醒它吗?还是我们需要别的东西?
标签: java polling serversocket