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
Partager