Я только начал изучать java NIO, неблокирующий IO. Мне интересно знать основы реализации. Как устанавливается связь между селектором Java и физическим сокетом? Существует ли поток уровня операционной системы, который непрерывно контролирует базовый ресурс? И есть ли какой-либо поток java для каждого селектора, который непрерывно проводит опрос, чтобы получать эти события? Может кто-то из вас любезно указать мне на это.
Как селектора внедряются внутри страны?
Ответ 1
Я думаю, что лучше сначала дать вам фотографию (взять из блога другого парня)
(источник: csdn.net)
Кроме того, некоторая информация взята из этого блога,
- Для выбранной реализации это зависит от ОС. Для epoll/select в * nix ENV вы можете получить дополнительную информацию из network Сетевое программирование Unix》
- И для уведомления/пробуждения выбора, JVM также использует другую реализацию, такую как TCP/IP на окнах, каналы на * nix.
Ответ 2
Нет, точка select
заключается в том, что вам не нужно тратить время на опрос циклов, когда ничего не происходит. Каждая ОС каким-либо образом реализует эту функцию (обычно через аппаратные прерывания) и делает ее доступной для программ пользовательского пространства через системный вызов select()
. Соединение с языком Java состоит в том, что JVM теперь содержит код, который вызовет OS select
для вас, если вы используете правильные классы и методы NIO. Но это потребовало внесения изменений в код JVM, но это не то, что вы могли бы сделать чисто внутри Java до NIO.
Ответ 3
Поскольку он не указан в документации, я бы предположил, что (строго говоря) это зависит от реализации.
Однако в * NIX и Windows реализация обычно зависит непосредственно от системного вызова select
. Этот системный вызов не реализуется путем нереста нескольких потоков.
Ответ 4
Это зависит от используемой операционной системы. В Linux в текущей реализации используется механизм ядра epoll.
Обычно базовая сетевая система ядра заполняет или дренирует буферы для сокета, возможно, на нем IRQ обрабатывает потоки. Так что вы ожидаете, это ядро, чтобы сказать вам, что буфер готов к заполнению (записи) или чтению для дренирования (чтения).