Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2831 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Multi thread

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Multi thread

n°199506
10couNAS
Posté le 22-08-2002 à 09:45:23  profilanswer
 

Bonjour,
J'ai un programme client/serveur qui fonctionne en multi-thread.
Je veux que le serveur envoi sur sa socket TCP des "paquets"ou buffer toutes les 100 µs.
Pour cela, le thread qui est chargé d'envoyer les paquets utilise la fonction gettimeofday.
Cette fonction renvoit le temps écoulé depuis ...
ex: 129789.202948 (129789 s et 202948 µs)
 
Ca fonctionne à moitié  
J'ai observé que toutes les 2ms, c'est comme si le thread n'avait plus la main pendant entre 50ms et 150ms
Pour résumer :
ça marche pendant 2ms et après ça s'arrête pendant 50 à 150 ms puis ça remarche pendant 2 ms puis .....  
 
Est ce que qq'un pourrait m'apporter une solution pour que ça marche plus de 2ms :D


Message édité par $boss$ le retourr le 22-08-2002 à 09:46:01
mood
Publicité
Posté le 22-08-2002 à 09:45:23  profilanswer
 

n°199523
therier
heu...coucou!
Posté le 22-08-2002 à 10:04:40  profilanswer
 

10couNAS a écrit a écrit :

Bonjour,
J'ai un programme client/serveur qui fonctionne en multi-thread.
Je veux que le serveur envoi sur sa socket TCP des "paquets"ou buffer toutes les 100 µs.
Pour cela, le thread qui est chargé d'envoyer les paquets utilise la fonction gettimeofday.
Cette fonction renvoit le temps écoulé depuis ...
ex: 129789.202948 (129789 s et 202948 µs)
 
Ca fonctionne à moitié  
J'ai observé que toutes les 2ms, c'est comme si le thread n'avait plus la main pendant entre 50ms et 150ms
Pour résumer :
ça marche pendant 2ms et après ça s'arrête pendant 50 à 150 ms puis ça remarche pendant 2 ms puis .....  
 
Est ce que qq'un pourrait m'apporter une solution pour que ça marche plus de 2ms :D




 
Je pense que ça s'appelle le scheduling ça....  :D  
 
T'as beaucoup d'autres thread? T'as changé les priorités?
 


---------------
XBox? http://www.gamertagdatabase.com
n°199529
SoWhatIn22
Posté le 22-08-2002 à 10:08:12  profilanswer
 

10couNAS a écrit a écrit :

Bonjour,
J'ai un programme client/serveur qui fonctionne en multi-thread.
Je veux que le serveur envoi sur sa socket TCP des "paquets"ou buffer toutes les 100 µs.
Pour cela, le thread qui est chargé d'envoyer les paquets utilise la fonction gettimeofday.
Cette fonction renvoit le temps écoulé depuis ...
ex: 129789.202948 (129789 s et 202948 µs)
 
Ca fonctionne à moitié  
J'ai observé que toutes les 2ms, c'est comme si le thread n'avait plus la main pendant entre 50ms et 150ms
Pour résumer :
ça marche pendant 2ms et après ça s'arrête pendant 50 à 150 ms puis ça remarche pendant 2 ms puis .....  
 
Est ce que qq'un pourrait m'apporter une solution pour que ça marche plus de 2ms :D




 
tu ne peux PAS être sûr d'avoir la main toutes les 100ms, parce que le scheduler te donne la main quand il en a envie. Alors à moins de mettre ton thread en priorité 'temps réel', tu ne pourras pas être sûr d'avoir la main toutes les 100µs.
Par contre, tes valeurs de 50 à 100ms m'étonnent. J'aurrais plus compris une valeur entre 20 et 40ms...

n°199543
10couNAS
Posté le 22-08-2002 à 10:25:23  profilanswer
 

J'ai a peu près 10 threads minimum et je ne me suis pas occupé des priorités
 
En fait pour le serveur, j'ai 5 threads et j'ai un thread par client.
Et chaque thread associé a un client doit envoyer des paquets toutes les 100µs à son client

n°199565
therier
heu...coucou!
Posté le 22-08-2002 à 10:39:01  profilanswer
 

10couNAS a écrit a écrit :

J'ai a peu près 10 threads minimum et je ne me suis pas occupé des priorités
 
En fait pour le serveur, j'ai 5 threads et j'ai un thread par client.
Et chaque thread associé a un client doit envoyer des paquets toutes les 100µs à son client




 
Sais tu que ce ne sont pas les seuls process qui tournent sur ta machine...  :D  
Combien de temps prends ton envoi?  :D  
 
Je pense que tu as deja la reponse à ta question.
 
100 microsecondes = 0,1 ms, non?!?


---------------
XBox? http://www.gamertagdatabase.com
n°199568
BENB
100% Lux.
Posté le 22-08-2002 à 10:42:33  profilanswer
 

10couNAS a écrit a écrit :

J'ai a peu près 10 threads minimum et je ne me suis pas occupé des priorités
 
En fait pour le serveur, j'ai 5 threads et j'ai un thread par client.
Et chaque thread associé a un client doit envoyer des paquets toutes les 100µs à son client




 
Mis a par tourner sur un multi-proc :D le seul conseil que j'ai a te donner, c'est de ne pas faire une thread par client...
 
Quand le nombre de tes client va augmentre les perfs de ta machine vont s'effondrer, et ce d'autant plus que la creation destruction de thread n'est pas anodin...
 
Une bonne solution est de faire du thread-pooling...

n°199570
SoWhatIn22
Posté le 22-08-2002 à 10:44:42  profilanswer
 

10couNAS a écrit a écrit :

J'ai a peu près 10 threads minimum et je ne me suis pas occupé des priorités
 
En fait pour le serveur, j'ai 5 threads et j'ai un thread par client.
Et chaque thread associé a un client doit envoyer des paquets toutes les 100µs à son client




Ben avec 5 threads, ca me parait difficile. Ceci dit, tu dois avoir une appli sérieusement critique pour avoir besoin d'envoyer des données toutes les 100µs. Je veux dire que si tu pouvais réellement faire cela, avec 5 threads en même temps, la machine va passer son temps à essayer d'envoyer des messages.
Donc:
  - soit tu n'as pas besoin d'envoyer toutes les 100µs
  - soit tu as vraiment besoin, auquel cas il faudrait qu tu n'ai qu'un seul thread qui se charge de l'envoi des messages, et que tu augmente sa priorité. ATtention, sous Linux, ton client devra avoir des droits spéciaux (root?) pour pouvoir changer la policy du scheduler et augmenter la priorité du thread en question.
 
Mias quand même, 5 threads qui envoient des messages toutes les 100µs, ca mùe parait louche :D

n°199572
10couNAS
Posté le 22-08-2002 à 10:45:45  profilanswer
 

"Sais tu que ce ne sont pas les seuls process qui tournent sur ta machine.." -> oui
 
Mon envoi dure 10 secondes par exemple
 
ex:
En même temps
Le serveur envoit pendant 10 secondes 1 paquet(2 octets) toutes les 100µs au client A
Le serveur envoit pendant  5 secondes 1 paquet(1 octets) toutes les 100µs au client B
Le serveur envoit pendant  8 secondes 1 paquet(2 octets) toutes les 200µs au client C
:ouch:

n°199575
therier
heu...coucou!
Posté le 22-08-2002 à 10:50:01  profilanswer
 

10couNAS a écrit a écrit :

"Sais tu que ce ne sont pas les seuls process qui tournent sur ta machine.." -> oui
 
Mon envoi dure 10 secondes par exemple
 
ex:
En même temps
Le serveur envoit pendant 10 secondes 1 paquet(2 octets) toutes les 100µs au client A
Le serveur envoit pendant  5 secondes 1 paquet(1 octets) toutes les 100µs au client B
Le serveur envoit pendant  8 secondes 1 paquet(2 octets) toutes les 200µs au client C
:ouch:




 
oui, mais en fait rien ne se fait en même temps vraiment.
avec 100 micros seconde, tu passes ton temps a scheduler!


---------------
XBox? http://www.gamertagdatabase.com
n°199576
10couNAS
Posté le 22-08-2002 à 10:50:05  profilanswer
 

BENB c'est quoi le thread-pooling :??:

mood
Publicité
Posté le 22-08-2002 à 10:50:05  profilanswer
 

n°199586
therier
heu...coucou!
Posté le 22-08-2002 à 10:54:16  profilanswer
 

de toute façon, rien que ton envoi risque de prendre plus de 100 micros, donc tu risques de bourrer ton buffer d'envoi....


---------------
XBox? http://www.gamertagdatabase.com
n°199589
10couNAS
Posté le 22-08-2002 à 10:57:46  profilanswer
 

Et avec un envoi ttes les 1ms ça changerait qqch par rapport aux 100µs?

n°199680
10couNAS
Posté le 22-08-2002 à 11:51:07  profilanswer
 

En fait, je crois que mon pb viens surtout du fait que mes clients fonctionnent en utilisant des boucles d'attente actives avec  
while(heure!=fin) gettimeofday(heure);
A part ça les autres threads utilise la fonctions pthread_cond_wait pour attendre qu'une condition soit rempli et ça, je ne sais pas si ça consomme beaucoup en temps...
 
Je ne sais pas ce que je peux faire pour remplacer mes boucles d'attente actives alors si vous avez des idées ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Multi thread

 

Sujets relatifs
[VC++]PB de thread[C++] Killer un thread, mais pas comme un gros cochon :o
tri d'un tableau multi-dimensionnel .. besoin d'aide..Thread
Débutant, cherche exemple de dev. avec base Access Multi-Utilisateursthread
[JAVA] probleme de threadUn chat multi platte forme en Flash
[Perl] Mémoire partagé en multi-thread[Java] Comment faire un multi thread
Plus de sujets relatifs à : Multi thread


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR