Est-il epoll équivalent en Java?
Est-il un équivalent de Linux epoll en Java?
epoll permet à un thread de réagir à un certain nombre d'hétérogène des événements. Par exemple, je peux avoir un thread qui réagit à une prise événement ou une entrée à partir de la console. En C++, je peux mettre en œuvre en vous inscrivant stdio et la prise de courant avec epoll. Mon fils va être déclenché par un événement de si ces.
Est-il une installation similaire dans Java? J'ai regardé le nio paquet, il me permet d'enregistrer un certain nombre de prises de courant avec un sélecteur. Mais il ne semble pas être loin de vous inscrire à la console /standard io avec un sélecteur. Je ne suis pas à voir quelque chose? Est-il une autre façon de le faire?
Sur le "pourquoi": je veux écrire un programme qui communique via les sockets, et j'ai envie de conduire ce programme en entrant les commandes de la console. Je sais comment cela peut être fait en séparant l'entrée de la console et de la communication pour les différents threads, mais je suis curieux de savoir si il existe un moyen de le faire dans un seul thread.
Grâce.
df
OK, j'ai mis à jour le post.
Je suppose que la norme "d'entrée de la console' serait probablement
System.in
(bien que vous devriez injecter de la référence, de ne pas coder en dur l'utilisation). Cependant, il ne ressemble pas à elle génère des événements (c'est à dire - il n'y a pas register()
ou une méthode similaire), donc je ne pense pas qu'il y est le comportement par défaut comme vous le souhaitez. Vous devriez écrire (ou de trouver) quelque chose à offrir ce comportement.Liées à la stackoverflow.com/questions/1915262/java-use-nio-with-system-in et stackoverflow.com/questions/765981/...
OriginalL'auteur dfreit | 2012-05-16
Vous devez vous connecter pour publier un commentaire.
Améliorations dans Java SE 6
java.nio
Un nouveau java.nio.les canaux.SelectorProvider de mise en œuvre qui est basé sur Linux epoll notification d'événement installation est inclus. L'epoll d'installation est disponible dans Linux 2.6, et les plus récents, les noyaux. La nouvelle epoll à base de SelectorProvider mise en œuvre est plus évolutif que le traditionnel sondage basé sur SelectorProvider mise en œuvre lorsqu'il y a des milliers de SelectableChannels enregistré avec un Sélecteur. La nouvelle SelectorProvider mise en œuvre sera utilisé par défaut lorsque le noyau 2.6 est détecté. Le sondage basé sur SelectorProvider sera utilisé lors de la pré-noyau 2.6 est détecté.
https://docs.oracle.com/javase/8/docs/technotes/guides/io/enhancements.html
SelectorProvider
sur la console?OriginalL'auteur
Oui, le
nio
package permet l'utilisation deSelector
s qui offre la fonctionnalité équivalent depoll()
/select()
et en fait l'un des implémentations utiliseepoll
comme le backend (cette option est sélectionnée viajava.nio.channels.spi.SelectorProvider
propriété Java). Les sélecteurs sont généralement utilisés avec des sockets réseau, mais si vous regardez à travers les différentsChannel
mises en œuvre dans les docs, je pense qu'il est probable que vous serez en mesure d'utiliser ce mécanisme avec l'entrée standard (il existe des classes d'assistance qui permettent de se déplacer entre vieuxStream
basé sur les Api et lesnio
Api à un certain degré).Selector
qui n'est pas unSelectableChannel
, et la seuleSelectableChannels
sont le support des canaux et les canaux de pipe.OriginalL'auteur