2017-05-27 2 views
0

J'ai des connaissances de base de here environ epoll. Je sais que epoll peut surveiller plusieurs FD et les gérer.
epoll: dois-je utiliser multi-threading

Ma question est: un événement lourd peut-il bloquer le serveur, donc je dois utiliser le multithreading? Par exemple, epoll d'un serveur surveille 2 sockets A et B. A commence à envoyer beaucoup de messages au serveur afin que le serveur commence à les lire. Une seconde plus tard, B commence aussi à envoyer des messages pendant que A envoie encore. Dans ce cas, ai-je besoin de créer un thread pour ces actions de lecture? Si je ne le fais pas, cela signifie-t-il que le serveur n'a aucune chance d'obtenir les messages de B jusqu'à ce que A termine son envoi?

Répondre

0

Si vous pouvez traiter les messages entrants assez rapidement (pas d'appels bloquants, pas de calculs lourds), vous n'avez pas besoin d'un thread séparé. Sinon, vous auriez avantage à aller multi-thread. Dans tous les cas, il est utile de comprendre ce qui se passe quand vous avez un seul thread et que vous ne pouvez pas traiter les messages assez rapidement. Si vous travaillez avec le protocole TCP, les machines qui vous envoient les données réduiront simplement leur taux de transmission. Lors de l'utilisation de UDP, certains paquets entrants seront supprimés.