Java в 2011: резьбовые сокеты VS НИО: что выбрать для 64-битной ОС и последней версии Java?

Я прочитал несколько сообщений о java.net и java.nio здесь, в StackOverflow, и в некоторых блогах. Но я все еще не могу понять, когда следует предпочесть NIO резьбовым сокетам. Не могли бы вы изучить мои выводы, приведенные ниже, и сказать, какие из них неверны, а какие упущены?

  • Поскольку в многопоточной модели вам нужно выделить поток для каждого активного соединения, и каждый поток занимает около 250 килобайт памяти для своего стека, с Поток на сокет, у вас быстро закончится память при большом количестве одновременных подключений. В отличие от NIO.

  • В современных операционных системах и процессорах большое количество активных потоков и время переключения контекста можно считать почти несущественным для производительности.

  • Общая пропускная способность NIO может быть ниже, поскольку select () и poll () используются асинхронными библиотеками NIO в высокопроизводительных приложениях. загрузка среды дороже, чем пробуждение и перевод в спящий поток потоков.

  • NIO всегда был медленнее, но он позволяет обрабатывать больше одновременных подключений. По сути, это компромисс между временем и пространством: традиционный ввод-вывод быстрее, но требует больше памяти, NIO медленнее, но использует меньше ресурсов.

  • Java имеет жесткое ограничение на количество параллельных потоков 15000/30000 в зависимости от JVM, и это будет ограничить поток на модель подключения до этого максимального количества одновременных подключений, но JVM7 не будет иметь такого ограничения (не могу подтвердить эти данные).

Итак, в качестве заключения, вы можете получить это:

  • Если у вас десятки тысяч одновременных подключений - NIO - лучший выбор, если только скорость обработки запросов не является для вас ключевым фактором
  • Если у вас меньше этого - поток на подключение - лучший выбор (учитывая, что вы можете позволить себе объем ОЗУ для хранения стеков всех параллельных потоков до максимума)
  • В Java 7 вы можете захотеть перейти на NIO 2.0 в любом случае.

Я прав?

26
задан Vladislav Rastrusny 25 March 2011 в 20:21
поделиться