Question

Je travaille sur un projet utilisant une file d'attente qui conserve des informations sur les messages à envoyer aux hôtes distants. Dans ce cas, un thread est responsable de l'insertion d'informations dans la file d'attente et un autre thread est chargé d'extraire les informations de la file d'attente et de les envoyer. Le second thread doit vérifier périodiquement les informations dans la file d'attente.

Mais plus tard, j'ai découvert qu'il s'agissait d'une réinvention de la roue :) Je pourrais utiliser une file d'attente bloquante à cette fin.

Quels sont les autres avantages d'utiliser une file d'attente de blocage pour l'application ci-dessus? (Ex: Performance, Modifiable du code, Toute astuce spéciale, etc.)

Était-ce utile?

La solution

Le principal avantage est qu'un BlockingQueue fournit une implémentation correcte, thread-safe. Les développeurs ont eux-mêmes implémenté cette fonctionnalité depuis des années, mais il est difficile d’y arriver. Le runtime a maintenant une implémentation développée, révisée et maintenue par des experts de la simultanéité.

Le " blocage " La nature de la file d’attente présente quelques avantages. Tout d'abord, lors de l'ajout d'éléments, si la capacité de la file d'attente est limitée, la consommation de mémoire est également limitée. De plus, si les consommateurs en file d'attente sont trop distants des producteurs, ceux-ci sont naturellement étranglés, car ils doivent attendre pour ajouter des éléments. Lorsque vous prenez des éléments de la file d'attente, le principal avantage est la simplicité. Attendre pour toujours est trivial, et attendre correctement un délai donné n’est qu’un peu plus compliqué.

Autres conseils

L’élément clé que vous éliminez avec la file d’arrêt de blocage est la "scrutation". C'est ici que vous dites

  

Dans ce cas, le second thread doit vérifier périodiquement les informations dans la file d'attente.

Cela peut être très inefficace - utiliser beaucoup de temps processeur inutile. Il peut également introduire des latences inutiles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top