Tout récemment, j'ai appris à propos de NIO. Ce que j'ai compris, c'est que le principal avantage de NIO est que nous pouvons gérer de nombreuses connexions avec seulement un (ou peu) de threads grâce à la fonctionnalité non bloquante de NIO. Mais ne pouvons-nous pas atteindre cet objectif en utilisant Executors et avoir une liste de threads de travail?Pourquoi devrais-je utiliser NIO (ou des frameworks comme netty) au lieu des exécutants java?
Je ne vois aucun avantage de NIO sur les Executors. Au lieu de cela, je pense que les exécuteurs sont meilleurs qu'utiliser NIO comme la lecture des messages est très facile et nous avons seulement besoin d'appeler readLin() par exemple, mais dans NIO nous devrions vérifier si le message est partiel ou le tampon a plusieurs messages. La fonctionnalité de non-blocage existe aussi dans l'âme des exécuteurs, où nous appelons la fonction d'exécution d'un exécuteur, nous ajoutons fondamentalement la connexion à un tampon et attendons que le nombre fixe de thread soit libre. Alors, pourquoi quelqu'un utiliserait-il NIO au lieu d'utiliser des exécuteurs?
Merci
Vous ne pouvez pas gérer plusieurs prises de blocage dans un seul fil. Se cacher derrière un «Exécuteur» ne change pas cela. – EJP
Si j'appelle la méthode d'exécution de l'exécuteur pour chaque socket reçue et que j'ai un exécuteur avec un seul thread, ce thread gère ces socket un par un. Ai-je tort? –
Oui. Vous allez bloquer dans la première lecture que vous émettez. – EJP