Есть ли чистый способ разрешить DNS-запрос (получить IP-адрес по имени хоста )в Java асинхронно, не -блокирующим способом (, то есть конечным автоматом, а не 1 запрос = 1 поток -Я бы нравится выполнять десятки тысяч запросов одновременно, но не запускать десятки тысяч потоков )?
Что я нашел до сих пор:
InetAddress.getByName()
является блокирующей, и похоже, что в стандартных библиотеках Java отсутствуют какие-либо неблокирующие реализации -.Future
использование парадигмы и, увы, очень ограниченная реализация -только очереди.Fun
Любые другие идеи/реализации, которые я пропустил?
Уточнение . У меня довольно большое (несколько ТБ в день )количество журналов.Каждая строка журнала имеет имя хоста, которое может быть практически из любого места в Интернете, и мне нужен IP-адрес для этого имени хоста для моих дальнейших расчетов статистики. Порядок строк на самом деле не имеет значения, поэтому моя идея состоит в том, чтобы сначала запустить 2 потока :для перебора строк:
И второй поток, который будет:
epoll
/ kqueue
подобный метод )Простая реализация модели на Perl с использованием AnyEvent
показывает мне, что моя идея в целом верна, и я могу легко достичь скорости, например, 15 -20 000 запросов в секунду, таким образом (реализация наивной блокировки будет равна 2 -3 запросам в секунду. второй -просто для сравнения -, так что разница в 4 порядка ). Теперь мне нужно реализовать то же самое на Java -, и я хотел бы пропустить развертывание собственной реализации DNS;)