2011-05-06 2 views
2

NioWorker.run appelle SelectorUtil.select qui sélectionne avec 500 ms de temporisation.Chaque travailleur netty se réveille 2 fois par seconde. Pourquoi?

NioClientSocketPipelineSink.Boss.run appels sélectionnez avec un délai de 500 ms.

NioServerSocketPipelinkSink.Boss.run appelle également select avec un délai de 1000 ms. Par conséquent, chaque travailleur se réveille au moins une fois par seconde, même si rien ne se passe sur le réseau. Est-ce une solution de contournement contre un problème? Je pense que le bon programme piloté par les événements ne doit pas se réveiller si rien ne se produit (par exemple, appelez "select" avec un timeout infini). Il n'y a pas d'explication dans les sources.

Répondre

0

Et si vous voulez arrêter le serveur ?, Si nous n'utilisons pas de délai, nous ne nous réveillons que lorsqu'un événement réel provient du réseau, cela peut prendre beaucoup de temps pour l'éteindre de manière propre (peut-être jamais) . Ces délais sont acceptables dans la plupart des cas, il n'est pas nécessaire d'attendre trop longtemps après la commande d'arrêt d'émission, et la boucle d'événement de contrôle ne prend pas beaucoup de ressources de l'UC.

+0

Il y a Selector.wakeup et Selector.close pour l'arrêt. – stepancheg

Questions connexes