#java #ssl #nio
#java #ssl #nio
Вопрос:
Из документации SSLEngine: «Отделяя абстракцию SSL / TLS от транспортного механизма ввода-вывода, SSLEngine можно использовать для широкого спектра типов ввода-вывода, таких как неблокирующий ввод-вывод (опрос), выбираемый неблокирующий ввод-вывод, сокет и традиционныйПотоки ввода / вывода, локальные байтовые буферы или байтовые массивы, ..» Будет ли использование SSLEngine с обычными сокетами и блокировкой каналов лучше по сравнению с использованием SSLSocket для блокировки ввода-вывода.
Комментарии:
1. Нет. Он привязан к сети. Я тщательно тестировал это несколько лет назад. Вера в то, что NIO обладает лучшей производительностью, в целом является мифом. Что у него есть, или, по крайней мере, для чего он был разработан, так это лучшая масштабируемость. Это не одно и то же.
Ответ №1:
Незначительно, да. NIO — это не только неблокирующий ввод-вывод. Это также принесло:
- API с более высоким уровнем использования, основанный на обернутых буферах (ByteBuffers), а не только на массивах байтов.
- API «Рассеивания» и «сбора», то есть возможность использовать более одного последовательного буфера в одной операции ввода-вывода.
- Прямой ввод-вывод: использование «прямых» байт-буферов, которые могут существовать вне кучи.
Последний пункт имеет очень конкретные общие последствия для производительности, потому что при использовании массивов / буферов на основе кучи JVM выполняет дополнительную копию любого массива, отправленного в собственном вызове, для облегчения синхронизации со сборщиком мусора. Этого можно избежать с помощью встроенных буферов, что может значительно снизить накладные расходы на сборку мусора.
Тем не менее, SSLEngine имеет огромные проблемы с удобством использования, поскольку его правильное использование серьезно затруднено, в частности, намного сложнее, чем использование старого доброго SSLSocket.
К счастью, эта библиотека позволяет использовать SSLEngine с интерфейсом байтового канала, выполняя всю тяжелую работу с SSLEngine (отказ от ответственности: я являюсь основным автором).