IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Threads & Processus C++ Discussion :

[Serveur]Multithreading obligatoire pour un serveur ?


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 2
    Par défaut [Serveur]Multithreading obligatoire pour un serveur ?
    Bonjour,

    voilà, je me confronte à un problème. J'ai entrepris la programmation d'un serveur. Il comporte différents modules (gestion de connexion, gestion de discussions privées, gestion de discussions publiques,...).

    Je voulais savoir si le passage par le multithreading était indispensable ou si l'élaboration d'un programme normal était suffisante ?

    Si je désire intégrer un système de transfert constant (son entre deux clients parmi tous les autres par exemple), le multithreading devient-t-il obligatoire ?

    Merci d'avance pour vos réponses.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    Le multithreading est préférable (je ne me rappel plus si on peut l'éviter).
    Car normalement, l'attente sur le socket de connexion est bloquant, du coup, si on bloque notre serveur sur les attentes de connexion, on ne va pas pouvoir renvoyer les messages que les clients ont voulus échanger.
    Après, je crois aussi (je peux me tromper car mon dernier combo client/serveur était en Java) qu'il faut un thread par client.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    zul
    zul est déconnecté
    Membre chevronné Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Par défaut
    Tout dépend du nombre de clients, et de l'importance des calculs à faire pour chaque calcul. Il existe d'autres approches que les approches par thread, genre le multiplexage. Tu devrai regarder du côté de boost::asio pour une librairie bas-niveau d'I/O asynchrone qui permet facilement d'écrire un serveur multithréadé ou pas (il y'a différents exemples d'implémentation de serveur http). Une autre ressource intéressante, c'est netlib qui se base aussi sur boost::asio.

    1 client / thread, c'est globalement à prohiber, ça scale mal.

  4. #4
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    Citation Envoyé par zul Voir le message
    Tout dépend du nombre de clients, et de l'importance des calculs à faire pour chaque calcul. Il existe d'autres approches que les approches par thread, genre le multiplexage. Tu devrai regarder du côté de boost::asio pour une librairie bas-niveau d'I/O asynchrone qui permet facilement d'écrire un serveur multithréadé ou pas (il y'a différents exemples d'implémentation de serveur http). Une autre ressource intéressante, c'est netlib qui se base aussi sur boost::asio.

    1 client / thread, c'est globalement à prohiber, ça scale mal.
    Je profite un peu de la discution: que veux-tu dire par "ça scale mal"? Le serveur monte en charge trop vite?

  5. #5
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par seeme Voir le message
    Je profite un peu de la discution: que veux-tu dire par "ça scale mal"? Le serveur monte en charge trop vite?
    Non, juste que ça n'est absolument pas rentable. Il faut confier à un thread un certain nb de clients.
    C'est un peu comme si à chaque nouvelle tâche dans une boite tu assignais un employé. Et que tu engageais un employé quand t'en as plus de disponible. Non, tu vas plutôt donner N tâches à faire à chaque employé.

    Pour les serveurs, aujourd'hui on utilise pas mal l'approche basée sur epoll & compagnie sinon, mais c'est l'approche bas niveau ça. L'alternative principale, c'est je pense les work stealing queues (je te laisse googler pour en savoir plus).

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut
    Citation Envoyé par Alp Voir le message
    Non, juste que ça n'est absolument pas rentable. Il faut confier à un thread un certain nb de clients.
    C'est un peu comme si à chaque nouvelle tâche dans une boite tu assignais un employé. Et que tu engageais un employé quand t'en as plus de disponible. Non, tu vas plutôt donner N tâches à faire à chaque employé.

    Pour les serveurs, aujourd'hui on utilise pas mal l'approche basée sur epoll & compagnie sinon, mais c'est l'approche bas niveau ça. L'alternative principale, c'est je pense les work stealing queues (je te laisse googler pour en savoir plus).
    aujourd'hui il me semble que ce soit les socket asynchrones non bloquant qui sont principalement utilisés voir AIO sous linux ou I/O completion port sous windows

  7. #7
    Nouveau candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 2
    Par défaut
    Tout d'abord, merci pour vos réponses.

    Cependant, j'avais oublié de préciser un petit quelque chose : j'utilise le Framework Qt.

    Donc je pense qu'en utilisant les signaux et les slots, je ne devrais pas avoir de problème mais je peux me tromper. Surtout que les clients n'ont pas besoin d'une réponse à la milliseconde près.

    Qu'en pensez-vous ?

  8. #8
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut
    Bonjour Artifice,

    Je ne sais pas quel est l'avancement de votre projet, mais au vu de vos questions, faites un tours du coté des démos de Qt fournis avec le framework (qtdemo.exe), rubrique networking : il y a pas mal d'exemples simples et assez bien foutu.

    La rubrique de Qt sur développez est également très riche... n'hésitez à faire un tour.

Discussions similaires

  1. [QThread] [QTCPSocket] Problème pour la réalisation d'un serveur multithread
    Par birdyz53 dans le forum Multithreading
    Réponses: 0
    Dernier message: 27/04/2011, 14h58
  2. Réponses: 3
    Dernier message: 23/08/2009, 19h49
  3. Choix d'un language pour mon serveur ?
    Par cocodunombril dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 24/11/2004, 23h14
  4. [DLL] Utilisation d'une DLL pour utiliser serveur Firebird
    Par sekiryou dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/08/2004, 14h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo