Gibt es einen Beispielcode für die Migration von der Standard LinkedBlockingQueue LMAX 'Disruptor Architektur? Ich habe eine Anwendung für die Ereignisbehandlung (einzelner Produzent, mehrere Verbraucher), die von der Änderung profitieren könnte.
Ist es sogar sinnvoll, wenn es mein Ziel ist, den Durchsatz zu maximieren anstatt die Latenz zu minimieren?
Mentaqueue bietet eine einzige Konsumenten-Warteschlange auf der Grundlage derselben Ideen - Ссылка , Sie könnten den Code untersuchen, obwohl ich ihn selbst nie benutzt habe.
Disruptor aus der Box bietet zwei Techniken hier - ich werde noch nicht in Code gehen, aber kann das tun, wenn Sie brauchen.
Es ermöglicht die Reihenfolge von Event-Handlern und Sie können sie so konfigurieren, dass jeder Handler alle Anfragen parallel verarbeitet; Jede Anfrage wird von jedem Handler bearbeitet.
Eine Worker Pool-Implementierung, die es einem Pool von Worker-Threads ermöglicht, jeweils eine Anforderung zu verarbeiten; Jede Anfrage würde einmal aus einem Thread-Pool behandelt.
Wenn Sie festgestellt haben, dass das Einreihen länger dauert oder Sie viel Zeit haben (Sperren / Synchronisation), würde ich mir den Disruptor auf jeden Fall ansehen. Sie erhalten die besten Vorteile, wenn Sie prüfen, ob Optimierungen an Ihrer Architektur zu einer sauberen Verwendung des Disruptors führen können.
Die Verringerung der Transaktionslatenz sollte dabei helfen, den Durchsatz zu erreichen. Dies könnte also Sinn machen, hängt aber davon ab, was Ihren Durchsatz hält. Dies wird zu einem sehr allgemeinen Kommentar - Sie sollten den Bereich Ihrer Anwendung identifizieren, der den Durchsatz zurückhält.
Indikatoren, die mich dazu bringen würden, den Disruptor zu verwenden, wären - viele kurze Aufgaben, die auf ähnliche Weise behandelt werden, Konflikte um Speicher, eine Sequenzierungsanforderung, Streaming oder schweres IO (die vom Batching profitieren könnten).
Tags und Links java queue concurrency disruptor-pattern