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

  FORUM HardWare.fr
  Programmation
  C++

  select() + multithreading

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

select() + multithreading

n°1042159
xterminhat​e
Si vis pacem, para bellum.
Posté le 10-04-2005 à 17:59:26  profilanswer
 

Est-il nvisageable d'executer dans le même processus des appels concurrents de SELECT() ?

mood
Publicité
Posté le 10-04-2005 à 17:59:26  profilanswer
 

n°1042178
Taz
bisounours-codeur
Posté le 10-04-2005 à 18:16:50  profilanswer
 

oui. Même sur les même descripteurs de fichiers mais je n'en vois pas l'intérêt :D.
 
Tu es sur ce que ce dont tu as besoin ce n'est pas plutôt un pool de thread ? un thread qui fait des select, et quand y a quelque chose à faire, il prend un thread dans le pool, lui file du travail, le lance et re ? Par exemple, quand select retourne, pour chaque fd tu lance un thread (du pool). C'est très commun comme technique


Message édité par Taz le 10-04-2005 à 18:18:50
n°1042181
xterminhat​e
Si vis pacem, para bellum.
Posté le 10-04-2005 à 18:19:34  profilanswer
 

J'ai un pool de threads. Chaque thread gère une ou deux connexions. J'ai donc un select dans chaque thread qui gère un ou deux sockets. Ca parait inefficace de loin ?

n°1042215
Taz
bisounours-codeur
Posté le 10-04-2005 à 18:48:44  profilanswer
 

non. Cela dit rien ne t'empêche de faire des IO bloquantes dans tes threads.

n°1042241
xterminhat​e
Si vis pacem, para bellum.
Posté le 10-04-2005 à 19:24:18  profilanswer
 

Les deux connexions par threads sont vraiment impérivisbles, alors je fais des appels bloquants.... apres un select(). Merci.

n°1042348
Taz
bisounours-codeur
Posté le 10-04-2005 à 21:09:12  profilanswer
 

fais gaffe à l'usage de select. lis bien man select et man select_tut

n°1042478
xterminhat​e
Si vis pacem, para bellum.
Posté le 10-04-2005 à 23:14:44  profilanswer
 

coté serveur, j'opère la séquence suivante :
listen()
select() <- ici je place le 'listening socket' dans 'rfds'
accept()
 
J'ai l'impression que si la connexion cliente arrive dans la stack IP entre l'execution de la commande listen() et select(), le select() bloque pendant toute la durée du timeout...
 
Lorsque le client et le serveur sont interconnecté en WAN : aucun soucis. Lorsque le client et le serveur sont sur la même machine en localhost, ca foire aléatoirement.

n°1042533
Taz
bisounours-codeur
Posté le 11-04-2005 à 00:49:23  profilanswer
 

:/ comme le dit le man, si ton programme fonctionne uniquement grâve au timeout, le problème est ailleurs.

n°1042535
xterminhat​e
Si vis pacem, para bellum.
Posté le 11-04-2005 à 00:53:03  profilanswer
 

Je me trompe peut etre mais j'ai l'impression que select ne marche que dans les programes qui ont une forme quasi "canonique" du point de vue réseau. Des que ca se complique, faut meler threads et appels bloquants de base.

n°1042601
Taz
bisounours-codeur
Posté le 11-04-2005 à 09:24:30  profilanswer
 

non. Que ça soit un thread ou dans un programme, l'usage est le même. Juste comme ça, tu as pensé à UDP ?

mood
Publicité
Posté le 11-04-2005 à 09:24:30  profilanswer
 

n°1042609
xterminhat​e
Si vis pacem, para bellum.
Posté le 11-04-2005 à 09:34:41  profilanswer
 

Je suis lié à une RFC pour le choix du protocole. Je suis en train de retirer l'appel SELECT en jouant sur plus de threads. J'espere obtenir un meilleur resultat...

n°1042611
Taz
bisounours-codeur
Posté le 11-04-2005 à 09:38:42  profilanswer
 

pourquoi ? tu as de mauvais résultats avec select ?

n°1042616
xterminhat​e
Si vis pacem, para bellum.
Posté le 11-04-2005 à 09:43:35  profilanswer
 

Oui, je ne les explique pas. Ca se manifeste par des connexions bloquées sur listen(), fermées de manière intempestives, ou alors select() bloque sur son timeout alors qu'il y a de l'activité. Tout ca depend en plus du temps selon reactivité du client, et le niveau de traces. Pour le moment, je rends couable select() mais je recode pour en avoir le coeur net.

n°1042619
xterminhat​e
Si vis pacem, para bellum.
Posté le 11-04-2005 à 09:45:21  profilanswer
 

L'architecture logicielle qui consiste à donner à manger à un pool de thread apres un select() fonctionne bien. Dans mon cas, je ne peux appliquer ce schéma. Le select() n'est peut pas adapté à ma configuration (multiples select() et multiples threads).

n°1042620
Taz
bisounours-codeur
Posté le 11-04-2005 à 09:45:57  profilanswer
 

heink ? t'es bien sur que tous tes sockets sont non-bloquants ? parce que là c'est du délire, select fonctionne au poil

n°1042622
xterminhat​e
Si vis pacem, para bellum.
Posté le 11-04-2005 à 09:47:53  profilanswer
 

Je n'ai que des socket bloquantes : listen(), accept(), send() et recv() sont bloquants. Mais je les execute suite à uen sortie de select() pour ne pas bloquer.


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

  select() + multithreading

 

Sujets relatifs
[PHP] - Gérer les entrées dupliquées My SQL & Remplir un <SELECT>??[Résolu] Comment obtenir le résultat -opposé- d'un SELECT ?
[MySQL] Comment éviter une requete de type : Select ... Where .. IN .?Champs SELECT et survol par un DIV, dans IE
Recupération de la valeur du formulaire html "select"Récupération de donné dans un forumulaire "Select"
valeur de <input text> en fonction d'un <select>[SOCKETS] Pb utilisation select ()
[MySQL 4.0.15] SELECT imbriqués : erreurFonction select() sur l'entrée std
Plus de sujets relatifs à : select() + multithreading


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