Question

Je suis en train de convertir notre code Java pour utiliser NIO, mais je ne suis pas sûr de la meilleure façon de le concevoir.

Mon approche initiale était de créer un pool de threads de sélection. Les fils sont mis en marche / tués au besoin, et les canaux sont enregistrés à un fil de sélection quand ils sont connectés / accepté dans un round-robin. A partir de là, chacun des blocs filetés de sélection (), et lorsque réveillé va exécuter le rappel approprié associé à chaque canal qui a une clé sélectionnée.

En plus de ce « fil de sélection multiple » design, je l'ai aussi vu des gens dire d'utiliser un seul fil de sélection, et un pool de threads d'expédition. Lorsqu'une opération IO est prêt à effectuer, le sélecteur signale un fil répartiteur, qui traite ensuite la demande. Ce modèle a l'avantage de ne pas bloquer le thread IO, mais maintenant nous forçons tous les IO en un seul fil et de traiter avec la synchronisation / une file d'attente d'événements dans le répartiteur.

En outre, je ne serait pas en mesure d'utiliser un seul tampon d'octets directe pour la lecture de chaque canal, en passant directement dans le rappel. Au lieu de cela je dois copier les données à chaque fois une lecture se produit dans un tableau et remis à zéro. (Je pense ..)

Quelle est la meilleure façon de mettre en œuvre ce?

Était-ce utile?

La solution

Jetez un oeil à la reactor

http://gee.cs.oswego.edu/dl/cpjslides /nio.pdf

Comment vous voulez que vos sélecteurs de travailler dépend vraiment de votre usecase. (Nombre de connexions, la taille des messages, etc.)

Quel est le problème que vous essayez de résoudre en convertissant de IO à NIO?

Autres conseils

Vous devriez vraiment regarder dans Mina,

http://mina.apache.org/

Il résout tous les problèmes que vous avez mentionnés.

Voir aussi Netty qui est vraiment rapide et riche en fonctionnalités et est également utilisé dans de grands systèmes et par les grandes entreprises comme Redhat (jboss), Twitter, Facebook ....

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top