java - 使用 Java 的高效 "Pinging"

标签 java mysql multithreading concurrency

我怎样才能最有效地浏览一个包含 12,000 个 IP 地址的数据库并 ping 打开所有这些地址的套接字? 目前我是这样工作的:

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

我目前的解决方案有效,只需要很长时间才能通过数据库一次。我正在尝试找到一种非常快速地访问数据库的方法;但是,我不知道从哪里开始。感谢任何帮助,谢谢!

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

最佳答案

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

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

关于java - 使用 Java 的高效 "Pinging",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14789596/

相关文章:

Java:如果数据库连接卡住或断开,如何重新启动它?

java - Maven 没有运行 Spring Boot 测试

java - 在 Android 中检索 JSON 的问题

mysql - 在 MySQL 中重置 AUTO_INCREMENT 需要很长时间

MySQL 端口还是套接字?

Java 并发性 - 最好是拥有带锁的线程列表或带请求列表的线程?

java - 在 Java 中向 Thread 类添加函数

java - 爬虫为某些服务器留下大量 ESTABLISHED TCP 套接字

Java byte[] 到 String 和 UTF-8

php - 使用 PHP 解析 unicode 表情符号文本文件