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

C Discussion :

Est-ce judicieux d'utiliser les threads?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Par défaut Est-ce judicieux d'utiliser les threads?
    Bonjour,

    Je fait un programme qui est essentiellement un serveur qui fournit des numéros de série à des IP bien spécifiques qui en font la requête (ces IP sont eux même des serveurs comportant des utilisateurs à qui l'on assigne des numéros de série, et authentifie aussi les utilisateurs ayant DÉJÀ des # de série).

    Il y a un thread de génération de numéros, un thread d'evoi/réception et un thread de communication avec une base de donnée mysql.

    Pour la génération des numéros, j'utilise un thread qui remplit 2 tableaux de 1024 uint64. Lorsqu'un de ces tableaux est complètement épuisé (i.e. le thread d'envoi a envoyé tt les numéros dans le tableau #1), ce thread rempli de nouveau le tableau avec des nouvelles valeurs, et pendant ce temps, le thread d'envoi a pris le tableau #2 (qui lui est rempli) et l'utilise jusqu'à ce qui soit vide, puis quand cela se produira il retombera sur le #1 et ainsi de suite.
    Le tout se fait avec un mutex... le thread d'envoi débloque le thread de génération quand un tableau est vide, etc... Le thread de génération doit aussi s'occuper de faire un "backup" dans la base MySQL et sur un fihier local aussi.

    Le thread de communication s'occupe de vérifier les numéros (ont-ils déjà été générés?, puisque chaque doit être unique). Comme chaque numéro généré est stocké dans la base de donnée, un numéro n'étant pas dans la base de donné est "illégal" (le serveur s'occupe de fournir des numéros de série, mais également de s'assurer de l'authenticité des numéros).

    Ma question est... est-ce bien d'utiliser autant de threads? Vous voyez je craint que la communication avec la base MySQL ralentisse le tout, puisque quand on authentifie un numéro, on doit attendre la réponse de la fonction SQL (à noter: c'est du théorique enore, aucun code n'est fait pour l'instant).

    J'ai peur de diviser inutilement le cache du CPU si je fais trop de threads (comme on dit en anglais, du "false sharing").

    Merci,
    Array

    P.S. J'utilise pthread

  2. #2
    Membre confirmé Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Par défaut
    Quelqu'un a-t-il une idée de quoi je parle? suggestions?

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Je ne comprend pas l'utilité de l'utilisation de la base de données pour stocker tous les numéros de série. Pourquoi ne pas les stocker en RAM (ou te servir de la RAM comme cache de la base de données) ? Ceci serait plus rapide et te supprimerais un thread.

    Pour le thread de génération, j'ai aussi du mal à voir son utilité : générer un numéro de série est-il si coûteux que cela?

  4. #4
    Membre confirmé Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Par défaut
    Bonjour, et merci bcp pour votre réponse.
    Le truc, c'est que le générateur de numéros utilise un algorithme dérivé des "galois linear shift registers" pour générer un numéro *unique*. Pour des raisons qui sont difficiles à expliquer, le numéro doit être petit, quelques charactères seulement... en prenant 62 charactères, soit les nombres, la lettres majuscules et minuscules, je peux représenter jusqu'à 62^6, autours de 56 milliards (changement de base, en base 62 bien évidemment, par exemple Ab72 donne un nombre etc etc). Je ne peux donc pas générer des numéros de série comme certains logiciels le font, par exemple 7A78-787A-902A-82928384 ...

    Il faut néanmoins savoir, lorsqu'on authentifie des utilisateurs ayant déjà un numéro de série (comme je l'ai dit le programme en fournit, mais également il s'assure de la légitimité d'un numéro de série existant), si celui-ci a déjà été généré par le passé (dans ce cas cela veut simplement dire que le numéro est légitime)... Come après un moi le programme aura facilement généré plusieurs centaines de milliers de numéros, il faut les garder en mémoire... d'où la banque de données.

    Pour le thread de génération, je ne sais pas moi-même. La routine est plutôt rapide oui (générer un million de numéros prend quelques milisecs seulement).

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Il manque une information cruciale : quelle est la volumetrie de la demande ?

    Si tu as une demande toutes les minutes, un programme mono-threade n'est pas forcement une betise. Si tu as plusieurs demandes par seconde, ca peut valoir le coup.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Ne serait-il pas plus simple de montrer l'authenticité d'un numéro de série par calcul ?
    Exemple : les deux derniers numéros sont la somme des précédents chiffres modulo 62².
    Tu peux aussi utiliser un compteur que tu incrémentes à chaque nouveau numéro généré et que tu chiffres pour générer une partie de ton numéro final.
    Tu n'auras plus qu'à le déchiffrer pour retrouver l'ancienne valeur du compteur.

    Pour le thread de générations, il lui faut quelques milisecs pour générer un million de numéros, combien de temps faut-il pour utiliser ces millions de numéros?

  7. #7
    Membre confirmé Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Par défaut
    @Neckara : En fait, le problème, c'est que de 1, la séquence doit absolument être indéchiffrable et de 2, l'algorithme doit garantir à 100% que chaque numéro généré soit unique i.e. qu'il soit généré une seule fois.

    @Gangsoleil: Je dirais autor de 50-60 requêtes par seconde lors d'un traffic très agité (assez rare mais peut arriver), et dans les moment plus courant, peut être disons 10-15 requêtes par seconde.

    Merci! Vraiment apprécié.

Discussions similaires

  1. Utiliser les threads pour les traitements long
    Par rach375 dans le forum Websphere
    Réponses: 3
    Dernier message: 14/11/2006, 12h08
  2. Utiliser les threads dans application Struts
    Par rach375 dans le forum Struts 1
    Réponses: 7
    Dernier message: 18/09/2006, 11h32
  3. Comment utiliser les Threads en VC++?
    Par mambo dans le forum MFC
    Réponses: 2
    Dernier message: 16/06/2006, 14h04
  4. BeginInvoke (utiliser les threads)
    Par the big ben 5 dans le forum Delphi
    Réponses: 6
    Dernier message: 16/05/2006, 18h30
  5. Réponses: 8
    Dernier message: 17/12/2004, 15h58

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