使用Java高效“Ping”

时间:2013-02-09 15:26:39

标签: java mysql multithreading concurrency

我怎样才能最有效地浏览12,000个IP地址的数据库并ping所有套接字? 目前我的工作方式如下:

  • 获取列表中的所有IP
  • 对于每个IP,打开一个新线程,打开服务器的套接字并从中接收数据包。
  • 在新主题上,根据IP在线的天气以及打开套接字时返回的内容更新信息。

我目前的解决方案是有效的,只需要很长时间就可以通过数据库一次。我试图找到一种方法来快速通过数据库;但是,我不知道从哪里开始。感谢任何帮助,谢谢!

编辑:我打开一个套接字并发送一个TCP数据包,然后存储信息。

1 个答案:

答案 0 :(得分:2)

尝试使用像netty(NIO)这样的东西。您可以在一个线程中将您的请求分散到所有IP(无论出于何种原因),并等待另一个线程中的返回。您当前的方法使用线程来管理所有远程主机的异步答案,这似乎没问题并且可以正常工作,但是产生线程只是为了等待并不是最佳选择。更好地打开大量连接,发送数据包,等待结果并让操作系统管理等待。

如果要执行不可预测的时间的并发计算,请仅使用多个线程。如果您有明确定义的任务,比如打开大量套接字,发送数据和等待响应,请在java中使用NIO框架(顺便说一句,通常单个线程就足够了)。