Linux C++ Thread

mikoo74 Messages postés 7 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 10 octobre 2006 - 5 oct. 2006 à 09:40
mikoo74 Messages postés 7 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 10 octobre 2006 - 10 oct. 2006 à 10:29
Salut All !
voila j'aimerais me renseigner un peu sur les Thread...Je dois developper un prog qui recupere des message sur un port et qui les traite.seulement le nombre de message est enorme et je pensai a chaque message recu lui affecter un nouveau thread ki le traite et se tue comme ca le prog continu a scanner... Je demarre egalement des Thread dans un Thread deja creer ... C'est bien ?
voila ce que j'ai fait j'aimerais savoir ce que vous en penser ...Je debute dans le domaine ^^
Je ne vais mettre que les partie importante car le code est long.


void * tag_log(void * arg)
{    
        //traitement coupé
        //appel d'une autre fonction (pas un thread...)

       pthread_exit(0);
}
        //**********************************************
bool filtre_client(MYSQL* my, char ip[], char mess[])
{        
    pthread_t th_tag;

    //traitement de filtrage coupé    

        //démarrage du thread de tag
        if (pthread_create (&th_tag,NULL,tag_log,message) == 0)
        {
            pthread_detach(th_tag);
        }
        else
        {
            printf("\nImpossible de démarrer le Thread de Tag\n");
        }
}

//**********************************************
void * start_ecoute(void * arg)
{
        //code coupé
    while(1) 
    {    
                //(code coupé) reception du message
                filtre_client(mysqlco,ip,line) == false
     }
}

//**********************************************

int main()
{    
    pthread_t th_ecoute;

    //démarrage du thread d'éoute UDP
    if (pthread_create (&th_ecoute,NULL,start_ecoute,NULL) == 0)
    {
        printf("Thread de D' Ecoute Syslog Demarre...\n\n");
    }
    else
    {
        printf("Impossible de démarrer le Thread D' Ecoute Syslog\n\n");
    }
    pthread_detach(th_ecoute);

    //Attente de la fin du Thread (inutil car programme "infini")
    //(void)pthread_join (th_liste,NULL);

    return 0;
}

//**********************************************


Bon voila j'ai mis vraiment que l'essentiel c'est a dire ce qui concerne les thread.Je ne sais pas en fait si cela fait vraiment bien ce que je veux car sous linux (console) je n'arrive pas a oir si des thread sont crées a partir de processus. J'ai vraiment besoin que le prog perde le moins de temp possible et comme les traitement sont long ... il faut que chaque message soit traiter dans un processus detaché du principal !Bien que la je le recois, fait un 1er filtrage puis si le message passe c'est la que je demarre un autre thread...

Merci d'avance ! ++

4 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
5 oct. 2006 à 11:46
Un thread par message?
Ca fait un peu beaucoup non ?

Pour quoi ne pas travailler avec seuleument deux threads ?
Un qui empile les data dans une FIFO.
L'autre qui dépiles les data de la FIFO et les traites.

Pour ma part j'aurai procédé de la sorte.

Shell
0
mikoo74 Messages postés 7 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 10 octobre 2006
5 oct. 2006 à 12:00
tu as surement raison ... seulement c'est un projet pour lequel le temp m'était limité et j'ai préféré utilisé mes connaissances car j'avais eja utilisé les threads sous windows (borland 6 c++).
Je me suis dit que chaque message creerait un thread mais qui ne resterait en vie que tres peu de temp (le temp du traitement). au pire qque thread serait creer avant que les precedent ne se soit tué ... mais jamais bcp en meme temp au final ! En tout cas cela marche, enfin a lair de marcher....seulement je ne sais pa reelement ce qu'il en est au nivo des creations des thread ... on ne peut pa savoir en commande linux ??? (jai fouiller les option de pstree top ... en vain)
Et surtout c'est "potable" de creer des thread depuis des thread ? et est ce que des "fork" serai mieux dans mon cas ? j'ai voulu essayé mais j'ai pas bien compris ... :s
Merci !
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
5 oct. 2006 à 18:00
La principale différence entre un processus classique et un thread (processus léger) est que lors de la création d'un processus, il y a création d'un nouvel espace d'adressage pour le fils. Le pere et le fils partage une seule chose : le segment TEXT (le code). Tandis que lors de la création d'un thread, l'espace d'adressage n'est pas recréé (gain de temps à la création et gain d'espace mémoire) mais partagé entre père et fils (sauf la pile utilisateur et la pile système). Le nouvel agent déroule son code dans le même EA.
Il n'y a aucun problème à créer des threads dans d'autre. Le fils n'aura pas pour parent le thread créateur (sauf si c'est le leader du groupe) mais sera rattaché au thread leader du groupe.
Peut être que créer un thread par groupe ou catégorie de messages plutôt que 1 thread par message sera un vrai gain. Ce n'est pas parce que les threads sont légers que créer 2000 threads au lieu d'un seul processus permet de gagner quelquechose.
0
mikoo74 Messages postés 7 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 10 octobre 2006
10 oct. 2006 à 10:29
oé ok je vais voir pour tout ca merci. ++
0
Rejoignez-nous