CircularBuffer très efficace de mise en œuvre (à la fois thread-safe et pas thread-safe)

Quelqu'un pourrait-il suggérer de bonnes CircularBuffer mise en œuvre? J'ai besoin des deux "pas" thread-safe" et "thread-safe" versions. J'attends la suite des opérations:

  • capacité à fournir de la taille de la mémoire tampon lors de la création de
  • l'ajout d'éléments
  • itération éléments
  • la suppression d'éléments lors de l'itération
  • probablement la suppression d'éléments

J'attends la mise en œuvre hautement optimisé en termes de vitesse et de mémoire utilisée, moyenne et au pire des moments etc.

Je m'attends pas "thread-safe" mise en œuvre extrêmement rapide. - Je m'attendre "thread-safe" de la mise en œuvre doit être rapide, probablement à l'aide de "lock-code libre" pour la synchronisation et c'est ok d'avoir certaines restrictions, si cela est nécessaire pour la vitesse.

Si le tampon est trop petit pour stocker de nouvelles (ajouté) élément c'est ok pour silenty remplacer existant élément ou raise exception.

Dois-je utiliser disruptor.net?

Ajout d'un lien vers un bon exemple Disruptor.NET exemple

  • Oui, il suffit d'utiliser Disruptor.net ils ont de bons résultats. Le perturbateur est une simultanéité composant utilisé pour l'échange de messages entre les threads (producteur, consommateur), Il est optimisé pour un débit élevé et une faible latence, des scénarios.
  • si perturbateur est efficace dans les "pas" thread-safe" scénario? Je peux utiliser de simples "array" et écrivez reste méthodes de moi-même
  • bien sûr, mais vous allez construire votre propre perturbateur...je ne voudrais pas perdre mon temps....
  • si vous pouvez ajouter l'exemple de la "pas" thread-safe" perturbateur scénario, il serait très utile. jusqu'à présent j'ai trouvé code.google.com/p/disruptor-net/wiki/CodeExamples mais il contient "multithread" version
  • j'ai trouvé quelque chose ici, stackoverflow.com/questions/8860684/disruptor-net-example
  • Accepté réponse a été converti à un commentaire... qui suce
  • savez-vous pourquoi il a été converti?
  • C'est très triste que certains peuples ont voté pour la fermeture de votre question. C'est une très belle question pour laquelle je suis très heureux d'avoir la solution. Merci!!!!!! Par le chemin " je pense que les réponses ne sont pas circulaires... à Essayer: ConcurrentCircularQueue (Multithread).

InformationsquelleAutor javapowered | 2012-11-07