mikoo74
Messages postés7Date d'inscriptionlundi 13 septembre 2004StatutMembreDernière intervention10 octobre 2006
-
5 oct. 2006 à 09:40
mikoo74
Messages postés7Date d'inscriptionlundi 13 septembre 2004StatutMembreDernière intervention10 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...
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDerniè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.
mikoo74
Messages postés7Date d'inscriptionlundi 13 septembre 2004StatutMembreDernière intervention10 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 !
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201419 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.