Допустим, у меня есть несколько каналов UDP и некоторые каналы TCP, зарегистрированные с помощью моего селектора. Как только селектор активируется, могу ли я просто продолжать цикл и читать как можно больше информации со ВСЕХ клавиш (не только выбранных) без повторения цикла и выполнения другого выбора ()? Для TCP это не имеет особого смысла, так как я могу читать как можно больше в свой ByteBuffer с вызовом channel.read (), но для UDP вы можете читать только один пакет за раз с вызовом channel.receive () , Так сколько пакетов я читаю? Вы видите проблему с тем, чтобы просто продолжать читать (не просто читать, а писать, подключать и принимать, другими словами, ВСЕ ключевые операции), пока не останется ничего другого, после чего я снова выполню выбор? Таким образом, канал UDP не будет голодать по другим каналам. Вы обработаете все каналы столько, сколько сможете, считывая по одному пакету за раз из каналов UDP. Я особенно обеспокоен:
1) Удар по производительности при выполнении слишком большого количества операций выбора, если я могу просто продолжать обрабатывать свои ключи без него.
2) Делает ли select () что-то фундаментальное, что я не могу обойти, чтобы продолжить чтение / запись / принятие / подключение?
Опять же, помните, что я буду обрабатывать все ключи, а не только выбранные. Если для ключа ничего не нужно делать (без данных), я просто ничего не делаю и перехожу к следующему ключу.