Frage

Ich arbeite an einem Projekt, bei dem eine Warteschlange verwendet wird, in der Informationen über die Nachrichten aufbewahrt werden, die an Remote -Hosts gesendet werden müssen. In diesem Fall ist ein Thread dafür verantwortlich, Informationen in die Warteschlange zu setzen, und ein anderer Thread ist dafür verantwortlich, Informationen aus der Warteschlange zu erhalten und zu senden. Der 2. Thread muss die Warteschlange auf die Informationen regelmäßig überprüfen.

Aber später stellte ich fest, dass dies die Neuerfindung des Rades ist :) Ich könnte zu diesem Zweck eine blockierende Warteschlange verwenden.

Was sind die anderen Vorteile der Verwendung einer blockierenden Warteschlange für die obige Anwendung? (Beispiel: Leistung, Änderung des Codes, spezielle Tricks usw.)

War es hilfreich?

Lösung

Der Hauptvorteil ist, dass a BlockingQueue Bietet eine korrekte, thread-sichere Implementierung. Entwickler haben diese Funktion selbst seit Jahren implementiert, aber es ist schwierig, richtig zu werden. Jetzt hat die Laufzeit eine Implementierung entwickelt, überprüft und von Parallelitätsexperten gepflegt.

Die "Blockierung" der Warteschlange hat ein paar Vorteile. Erstens ist beim Hinzufügen von Elementen, wenn die Warteschlangenkapazität begrenzt ist, auch der Speicherverbrauch begrenzt. Wenn die Warteschlangenverbraucher zu weit hinter den Produzenten zurückkommen, sind die Produzenten natürlich gedrosselt, da sie warten müssen, um Elemente hinzuzufügen. Bei der Entnahme von Elementen aus der Warteschlange ist der Hauptvorteil der Einfachheit. Es ist trivial, ewig zu warten, und das richtige Warten auf eine bestimmte Auszeit ist nur etwas komplizierter.

Andere Tipps

Die wichtigsten Sache, die Sie mit der blockierenden Warteschlange beseitigen, ist "Umfragen". Hier sagst du

In diesem Fall muss der 2. Thread die Warteschlange auf die Informationen regelmäßig überprüfen.

Dies kann sehr ineffizient sein - mit viel unnötiger CPU -Zeit. Es kann auch nicht benötigte Latenzen einführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top