Wir haben eine Anwendung, die auf Java + Netty basiert. Die Anwendung ist latenzempfindlich. Netty-Konfiguration:
- 1 Boss-Thread + 96 Worker-Threads
- Insgesamt hergestellte Netty-Kanalverbindungen: ~5K+
Hier erfolgt die Anfrageverarbeitung nur im Speicher, nicht im Netzwerk Es sind E/A- oder beliebige DB-Aufrufe beteiligt. Es handelt sich um eine CPU-intensive Aufgabe. Da die Anforderungsverarbeitung auch vom Arbeitsthread eines bestimmten Kanals abgewickelt wird, werden andere Kanalanforderungen zur Verarbeitung in die Warteschlange gestellt (korrigieren Sie mich, wenn ich hier falsch liege).
Wir möchten den Durchsatz der Anwendung verbessern. Um dieses Problem zu umgehen, möchten wir die Logik des Anforderungsverarbeitungshandlers an einen separaten Executor-Dienst delegieren (der Executor-Dienst ist ein globaler Thread-Pool für alle Arbeitsthreads). Bei diesem Ansatz muss der Arbeitsthread nicht auf den Abschluss der Anforderungsverarbeitung warten, sondern delegiert die Anforderung einfach an den Thread-Pool und fährt schneller mit dem nächsten Satz von Anforderungen in der Warteschlange fort.
Was sollte ich als nächstes beachten?
Mobile version