2010-06-29 9 views
2

Je me prépare à écrire une application réseau multithread. En ce moment, je me demande quel est le meilleur modèle de fil pour mon programme. L'application entière peut gérer jusqu'à 1000 descripteurs (fichiers locaux, connexions réseau sur divers protocoles et descripteurs supplémentaires pour la gestion des temporisateurs et des signaux). L'application sera optimisée pour Linux. Programme fonctionnera sur les ordinateurs personnels réguliers, donc je suppose, qu'ils auront au moins Pentium 4.Conception d'une application multithread (recherche de modèles de conception)

Voici mon idée actuelle:

  • Un thread gérer le réseau d'E/S à l'aide epoll.
  • fil deuxième sera gérer E/S comme local (E/S disque, minuteries, traitement du signal) en utilisant epoll
  • troisième fil se chargera de l'interface utilisateur (CLI, GTK + ou Qt)

La gestion de chaque connexion réseau dans un thread séparé élimine le processeur en raison d'un trop grand nombre de commutateurs de contexte.

Peut-être qu'il y a une meilleure façon de faire cela?

Connaissez-vous des documents/livres sur la conception d'applications multireades? Je cherche des réponses sur des questions comme: Quel est le nombre rationnel de threads? etc.

Répondre

2

Vous êtes sur la bonne voie. Vous souhaitez utiliser un modèle de pool de threads pour gérer le réseau au lieu d'un thread par connexion réseau.

Ce site peut également vous être utile et énumère les modèles de conception les plus courants et les situations dans lesquelles ils peuvent être utilisés.

Pour gérer les E/S de disque, vous pouvez envisager d'utiliser mmap sous Linux. C'est très rapide et efficace. De cette façon, vous laisserez le noyau faire le travail et vous n'aurez probablement pas besoin d'un thread séparé pour cela.

Je joue actuellement avec Boost :: asio qui semble être assez bon. Il utilise epoll sur linux. Comme il apparaît que vous utilisez une boîte à outils multiplateforme comme Qt, boost asio fournira également un support multiplateforme pour que vous puissiez l'utiliser sur Windows ou Linux. Je pense qu'il pourrait y avoir un mmap multi-plateforme aussi.

Questions connexes