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

Administration système Discussion :

Multitâche sous Linux.


Sujet :

Administration système

  1. #1
    Membre actif
    Avatar de epeios
    Homme Profil pro
    Ingénieur logiciel
    Inscrit en
    Août 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur logiciel

    Informations forums :
    Inscription : Août 2003
    Messages : 38
    Billets dans le blog
    2
    Par défaut Multitâche sous Linux.
    Après avoir abandonné fork(), parce que trop lourd (duplication inutile, dans mon contexte d'utilisation, de certaines données), je me suis tourné vers les thread POSIX (pthread_create() et consort). Cette solution avait jusqu'à présent fonctionnée avec les différentes distribution Linux auxquelles j'avais à faire (entre autres une Redhat 7.2), jusqu'à ce que je la teste avec une Redhat 9. Avec cette dernière, un pthread_create ne crée aucun nouveau thread, sans pour autant retourner un code d'erreur. Cela n'est pas trop grave car j'avais de toute manière l'intention d'utiliser la fonction _clone(), qui est plus performante que pthread_create() (qui s'appuie d'ailleurs sur _clone(), me semble-t'il). Cependant, _clone() est spécifique à Linux.

    Voici donc mes question :
    • Est-ce que l'utilisation de _clone() est ce qu'il y a de plus efficace sous Linux pour faire du multitâche, ou y a-t'il d'autres fonctions encore plus performantes ?
    • La fonction _clone() est-elle présente dans toutes les distributions Linux (sans avoir à recompiler le noyau) ?
    • Comment détecter la disponibilité de la fonction _clone() et/ou des pthread durant la compilation (histoire de pouvoir utiliser l'un ou l'autre selon que mon programme est destiné à tourné sous Linux, un autre UNIX, ou Cygwin).


    Question subsidiaire :
    • Pourquoi les pthread_...() ne fonctionnent-ils plus avec la Redhat 9 (les sources sont visibles en suivant le lien sur la page http://epeios.org/epeios/cvs/, fichiers 'mtk.h' et 'mtk.cpp', mais je ne pense pas que le problème vienne des sources).


    Merci d'avance pour vos réponses ...

    [edit]Suite au message ci-dessous, correction du numéro de version de la Redhat (9.2 en 9)[/edit]

  2. #2
    Membre expérimenté
    Inscrit en
    Août 2003
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 156
    Par défaut Re: Multitâche sous Linux.
    Citation Envoyé par epeios
    Pourquoi les pthread_...() ne fonctionnent-ils plus avec la Redhat 9.2
    euh je ne peux pas répondre à la question mais juste une précision pour ceux qui viendront y répondre, tu utilises une RedHat 9 ou une Mandrake 9.2 : parce que la RedHat 9.2 ça n'existe pas.

    si tu as une RedHat 9, elle n'est plus supportée par RedHat, je te conseille donc de passer à la Fedora.

    bon courage

  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
    2 / _clone est disponible dans toutes les distributions linux, il s'agit d'un system call (appel system) de linux.
    3 / c le role de configure et tu trouvera surement un bon nombre de tutos pour utiliser autoconf
    1/ Je m'insurge . pthread_ utilise clone sous linux. Mais il n'y aucune différence de temps notoire entre un appel a pthread_create et un appel a _clone. La vitesse d'un programme est quasiment jamais lié a ses structures de données et a ses algos, pas si il utilise _clone a la place de pthread_..
    En utlisant pthread, tu es deja portable (enfin sur ce qui ressemble a un systeme POSIX). Et un autre point important, c que tu as de quoi gerer la synchronisation des processus (mutex, semaphore, ...) ce qui risque d'etre plus delicat si tu utilise _clone. Apres c'est a toi de voir mais je ne te recommande pas d'utiliser _clone pour un potentiel gain de temps de 0,00000000001 ms par appel .

    ZUL

  4. #4
    Membre actif
    Avatar de epeios
    Homme Profil pro
    Ingénieur logiciel
    Inscrit en
    Août 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur logiciel

    Informations forums :
    Inscription : Août 2003
    Messages : 38
    Billets dans le blog
    2
    Par défaut
    Le problème avec la Redhat 9 venait du fait que la gestion des threads POSIX est faite avec la NPTL, et non plus avec LinuxThreads. La particularité des threads NPTL c'est que getpid() retourne toujours la même valeur pour tous les threads, contrairement à ce qui se passait avec LinuxThreads.
    Utiliser pthread_self(), en lieu et place de getpid(), semble résoudre mon problème avec la Redhat 9. En outre, la NPTL semble nettement plus performante que LinuxThreads, et, de ce fait, je laisse tomber clone() pour l'instant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Série] Accès au port série sous linux
    Par ghost dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 10/10/2007, 11h43
  2. Comment désinstaller MySQL sous linux
    Par nahmsath dans le forum Installation
    Réponses: 5
    Dernier message: 18/09/2007, 11h46
  3. installer jbuilder7 sous linux
    Par rtlinfo34 dans le forum JBuilder
    Réponses: 5
    Dernier message: 30/10/2002, 20h16
  4. Réponses: 2
    Dernier message: 25/10/2002, 23h19
  5. Je ne peux établir une connexion cliente sous Linux.
    Par Anonymous dans le forum CORBA
    Réponses: 5
    Dernier message: 16/04/2002, 16h57

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