В одном из моих вариантов использования мне нужно получить данные с нескольких узлов. Каждый узел поддерживает диапазон (раздел) данных. Цель состоит в том, чтобы прочитать данные как можно быстрее. Ограничения есть, мощность раздела заранее не известна. Используя подход разделения работы, я мог разделить разделы на подразделы и получать данные параллельно. Одним из недостатков этого подхода является то, что один поток может получить много данных и занять больше времени, в то время как другой поток может завершиться быстрее. Другой подход заключается в использовании кражи работы, когда мы можем разбить разделы на гораздо меньшие диапазоны и использовать ForkJoinPool. Недостаток этого подхода заключается в том, что если раздел разреженный, мы можем сделать много циклов обращения к серверу, чтобы понять, что для подраздела нет данных.
У меня вопрос: если я хочу использовать ForkJoinPool, где задачи могут выполнять некоторые операции ввода-вывода, как мне это сделать? Из документации пула FJ и лучших практик, которые я читал до сих пор, кажется, что пул FJ не подходит для блокировки операций ввода-вывода. Если я хочу использовать неблокирующий ввод-вывод, как мне это сделать?