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

Réseau C Discussion :

Vérifier l'activité des threads et fonction select()


Sujet :

Réseau C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Vérifier l'activité des threads et fonction select()
    Bonjour à tous !

    Après avoir chercher assez longtemps sur internet, et fouillé ce forum (merci la fonction recherche, même si j'avais déjà cherché dans les 6 premières pages de post à la main^^), je me décide à poster. Donc j'ai pour projet de développer un serveur web. Tout se passe plutôt pas mal, j'ai facilement réalisé un serveur séquentiel (qui ne traite les requêtes que une par une), puis changé ce serveur pour un serveur parallèle, avec la fonction fork(), puis amélioré ce serveur parallèle grâce au thread, beaucoup plus performant dans ce cas là. Tout se déroule à merveille, j'ai beau laissé tourner mon serveur longtemps, sachant que je fait beaucoup de connexion dessus pour le tester sur la durée, et tout se passe bien, mon pc ne se ralentit pas, ce qui confirme que j'ai bien géré les threads. De toute façon, ça se voit bien dans le code, chaque thread est terminé par pthread_exit, ce qui logiquement suffit.
    Donc voilà ma question. J'aimerais savoir s'il est possible de lister tous les threads en activité à un moment précis? Pour l'instant la valeur renvoyée par pthread_create, je ne l'utilise pas, enfin je la test pour vérifié que le thread est bien créé, mais rien d'autre. Et je ne vois pas trop quelle utilité cette valeur pourrait avoir.

    Ensuite, concernant select(), j'aimerais juste savoir si j'ai bien compris l'utilité de cette fonction. Par exemple, disons que j'ai un socket A qui est en attente d'un quelconque client qui viendrait se connecter. Je met son descripteur dans une structure dite "de lecture", que je rentre en paramètre de select(), et dès qu'il y a de l'activité sur ce socket, elle rend la main et donc je peux faire mon accept() sans qu'il bloque le programme? Et surtout, sans consommer de ressource durant l'attente d'un hypothétique client. Et je peux aussi déterminer un "timeout", c'est un dire une certaine durée entre la fonction accept() et la fonction read() qui, s'il n'y a aucune donnée transmise durant cette donnée, quitte le thread (en gros ne pas garder le thread actif si le client a par malchance eu une perte de connexion entre sa fonction connect() et sa fonctione write()). Et par contre, je n'ai strictement rien compris aux valeurs renvoyées par select() .

    Merci d'avance pour vos réponses.

    Thagor

    PS: Je n'ai pas mis de code car je ne l'ai pas sous la main, si y a besoin je mettrais ma boucle gérant la création des threads. Et pour information, je suis sous Linux comme environnement de développement (avec VIM, mais ça, ça n'a pas d'importance^^).

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par Thagor Voir le message
    Donc voilà ma question. J'aimerais savoir s'il est possible de lister tous les threads en activité à un moment précis?
    la fonction pthread_self renvoi l'id du thread qui l'execute, tu peux les stocker dans un tableau

    Ensuite, concernant select(), ...
    http://man.developpez.com/man2/select_tut.2.php

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour la réponse sur le select(), ça a confirmé que j'avais bien compris, et les exemples ont été forts utiles.
    Et pour les threads, je pensais utiliser directement l'ID du thread "renvoyée" par pthread_create. Je met des guillemets car elle n'est pas réellement renvoyée, c'est juste que le premier paramètre de la fonction est remplie avec cette ID. Mais au final, mon but étant seulement d'afficher le nombre de threads actifs, et ne me préoccupant pas tellement de la portabilité de mon programme (je pense pas l'utiliser sur un autre pc que le miens^^), je vais directement lire dans le fichier "/proc/[PID du programme]/status", la 22ème ligne comportant le nombre de threads actifs du proccessus. Et j'en profite pour récupérer le "Cpus_allowed" et le "Mems_allowed" qui me permette d'indiquer les ressources allouées à mon programme^^.

    Merci beaucoup de la réponse, et à une prochaine fois peut être^^.

    Thagor

Discussions similaires

  1. Gestion des Threads en fonction des CPUs.
    Par ToTo13 dans le forum Concurrence et multi-thread
    Réponses: 29
    Dernier message: 01/04/2010, 20h26
  2. Réponses: 4
    Dernier message: 09/11/2009, 13h45
  3. Afficher des données en fonction d'un champ select
    Par gueud dans le forum Langage
    Réponses: 4
    Dernier message: 04/05/2008, 13h48
  4. Questions relatives au fonctionement des threads
    Par pier* dans le forum Réseau
    Réponses: 7
    Dernier message: 24/05/2006, 22h11
  5. Afficher/cacher des éléments de type select en fonction d'autres
    Par GLDavid dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/04/2006, 10h06

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