Bonjour,
Je développe actuellement un serveur pour un TP de C++ que je compte reprendre pour un de mes projets perso.
De celui-ci, j'ai un thread qui lit des données sur un port, enregistre les données dans une liste tandis que plusieurs threads se chargent de lire cette liste.
J'aurais donc des insertions en queue et en tête (pour certains messages prioritaires) et des suppressions/lectures en tête.
D'après ce que j'ai lu, les std::deque seraient plus adapté que des std::list à mon besoin.
Malheureusement, je ne comprend pas trop comment les std::deque sont implémentés (tableau circulaires ? maillons contenant plusieurs éléments ?), or j'aimerais bien me faire une idée des performances dû à son utilisation.
S'il faut allouer à chaque insertion, mon thread de lecture va être extrêmement lourd or je veux l'éviter à tout prix.
La solution optimale à laquelle je penserais serait d'allouer un tableau de X éléments et d'avoir un pointeur pour la lecture et un pointeur pour l'écriture.
Une fois arrivé au bout du tableaux, ils reviendrait au début de celui-ci. Ce qui me permet de ne bloquer que lors du déplacement du pointeur d'écriture, la remise au début du tableau du pointeur de lecture et non pas lors de la lecture/écriture des éléments.
Est-ce que le deque pourrait m'offrir des performances relativement aussi intéressante que ma solution "maison" ?
Partager