¿Hay equivalente epoll en Java?
multithreading (2)
Mejoras en Java SE 6
java.nio
Se incluye una nueva implementación de java.nio.channels.SelectorProvider que se basa en la función de notificación de eventos epoll de Linux. La instalación de epoll está disponible en los kernels de Linux 2.6 y más nuevos. La nueva implementación de SelectorProvider basada en epoll es más escalable que la implementación tradicional de SelectorProvider basada en sondeo cuando hay miles de SelectableChannels registrados con un Selector. La nueva implementación de SelectorProvider se utilizará de forma predeterminada cuando se detecte el kernel 2.6. El SelectorProvider basado en sondeo se utilizará cuando se detecte un kernel pre-2.6.
https://docs.oracle.com/javase/8/docs/technotes/guides/io/enhancements.html
¿Hay un equivalente de Linux epoll en Java?
epoll permite que un hilo reaccione a una serie de eventos heterogéneos. Por ejemplo, puedo tener un hilo que reacciona ante un evento de socket o una entrada desde la consola. En C ++ puedo implementar esto registrando stdio y el socket con epoll. Mi hilo se activará por un evento de cualquiera de estos dos.
¿Hay alguna instalación similar en Java? Miré el paquete nio, me permite registrar una cantidad de sockets con un selector. Pero parece que no hay distancia para registrar la consola / estándar io con un selector. ¿No estoy viendo algo? Hay otra manera de hacer esto?
Sobre el "por qué": quiero escribir un programa que se comunique a través de sockets, y quiero conducir este programa ingresando comandos desde la consola. Sé cómo se puede hacer esto separando la entrada de la consola y las comunicaciones a diferentes subprocesos, pero tengo curiosidad por saber si hay una forma de hacerlo en un solo subproceso.
Gracias. df
Sí, el paquete nio
permite el uso de Selector
s que proporcionan la funcionalidad equivalente a poll()
/ select()
y en realidad una de las implementaciones usa epoll
como backend (esto se selecciona a través de java.nio.channels.spi.SelectorProvider
Java propiedad). Los selectores generalmente se usan con sockets de red, pero si miras las diferentes implementaciones de Channel
en los documentos, creo que es probable que puedas usar este mecanismo también con entrada estándar (hay clases de ayudantes que te permiten moverte entre el viejo Stream
: APIs basadas y las APIs de nio
hasta cierto punto).