Bonjour à tous !
Je sais que c'est un problème qui a déjà été abordé, mais je ne parviens pas, après recherche, à trouver des réponses précises à mes questions. S'il en existe déjà et que je ne les ai pas vues, excusez-moi d'avance.
Voilà, je développe actuellement un serveur de socket en Java, pour un jeu en flash. Le jeu étant au tour par tour, mon serveur n'a pas besoin d'être ultra-réactif, mais je tente tout de même d'en minimiser au maximum la charge pour éviter les mauvaises surprises. Or, j'utilise beaucoup de threads.
Pour chaque joueur un thread est créé, et ensuite j'en utilise beaucoup comme "timer" (pour déclencher tel ou tel évènement au bout de tant de temps, par exemple pour vérifier qu'un joueur a bien reçu telle ou telle donnée, qu'il est bien actif régulièrement, etc). Donc je me retrouve rapidement avec une grosse grosse masse de thread, même si ceux-ci sont légers et principalement inactifs (ils dorment pendant tant de seconde, exécutent une petite fonction et se terminent).
Mes questions sont donc :
- Est-ce mauvais d'avoir trop de thread, notamment concernant la charge processeur, même si ceux-ci sont majoritairement endormis (ou en attente de recevoir des sockets, donc inactifs) ?
- Comment connaître le nombre maximum de thread que je peux exécuter simultanément ? Parce qu'en cas de grosse affluence, même si ceux-ci sont "légers", j'ai peur d'arriver à une limite qui ferait planter le server.
- Existe-t-il une alternative aux thread pour exécuter une action au bout d'un temps donné ? Je sais qu'il existe une classe Timer en Java, mais j'ai cru comprendre qu'elle utilisait elle-même un thread en interne, donc ça ne résoudrait en rien le problème.
Merci d'avance de vos réponses, n'hésitez pas à me dire si je n'ai pas été clair.
Partager