2017-03-19 3 views
1

Ich füge einen neuen Endpunkt zu einem Jersey-basierten Web-Service hinzu. Die Logik, die den Endpunkt unterstützt, muss zwischen 10 und 50 Anrufe an einen anderen Dienst tätigen. Die Aufrufe sind unabhängig und können parallelisiert werden. Daher habe ich überlegt, den Executor-Service zu verwenden, um die Arbeit über mehrere Threads zu verteilen.Sollte ich ExecutorService innerhalb einer Anfrage erstellen oder eine Instanz über die Webapp teilen?

Ich frage mich, ob ich einen ExecutorService für jede Anfrage instanziieren sollte oder ob es eine gemeinsame executorService-Instanz über die Webapp gibt. Wie würde ich im späteren Fall entscheiden, wie viele Threads es ausführen soll?

Antwort

2

Ich frage mich, ob ich eine ExecutorService für jede Anforderung instanziiert sollte oder es eine gemeinsame ExecutorService Instanz über den Web-App sein. In dem späteren Fall, wie würde ich die Anzahl der Threads entscheiden, die es ausführen sollte?

Nr Generell sollten Sie nicht die executorService für jede Web-Anfrage (Option-1) instanziiert, da der Server bald über genügend Arbeitsspeicher ausgeführt wird und auch, Thread-Pool Schaffung on the fly ist teuer (zeitaufwendig).

Sie müssen also mit der gemeinsam genutzten Instanz (Option-2) von executorService gehen, indem Sie sie während des Serverstarts erstellen & konfigurieren Sie die Thread-Pool-Größe nach Ihren Anforderungen und die Durchführung der Leistungstests.

Sie können here beziehen, um auf den Thread-Pools zu verstehen.

+0

Was ist der beste Ansatz, um die Option 2 zu implementieren? Teilen Sie den executorService, der es in (zum Beispiel) einem Controller wie ein statisches Feld erstellt? Oder glauben Sie, dass es einen besseren Weg gibt, den ExecutionService zu teilen? – Rahnzo

Verwandte Themen