for (int i=0; i<100000; i++) {
// REST API request.
restTemplate.exchange(url, HttpMethod.GET, request, String.class);
}
Ich habe eine Situation, wo ich eine Ressource für 100k Benutzer anfordern muss und es 70 Minuten dauert, um zu beenden. Ich habe versucht, meinen Code so gut wie möglich aufzuräumen und konnte ihn nur um 4 Minuten reduzieren).Java 8: Wie kann ich eine for-Schleife konvertieren, um parallel zu laufen?
Da jede Anfrage unabhängig voneinander ist, würde ich gerne Anfragen parallel senden (kann in 10s, 100s oder sogar 1000s von Chunks sein, die alle schnell fertig sind). Ich hoffe, dass ich die Zeit auf 10 Minuten oder etwas knappes reduzieren kann. Wie berechne ich, welche Chunk-Größe den Job schnell erledigt?
Ich habe den folgenden Weg gefunden, aber ich kann nicht sagen, ob das Programm alle 20 auf einmal verarbeitet; oder 5 gleichzeitig; oder 10 auf einmal.
IntStream.range(0,20).parallel().forEach(i->{
... do something here
});
Ich apperiate Ihre Hilfe. Ich bin offen für irgendwelche Vorschläge oder Kritiker !!
UPDATE: Ich konnte IntStream verwenden und die Aufgabe in 28 Minuten abgeschlossen. Aber ich bin mir nicht sicher, dass dies das Beste ist, was ich erreichen kann.
* ich offen für alle Anregungen oder Kritik !! * - Ich denke, man eine Reihe von Anfragen stillen Kritiker –
Die 'IntStream' Methode verarbeiten zu einer Zeit, die gleich der Anzahl der Kerne in Ihrem Computer bekommen. Wenn Sie mehr Geschwindigkeit erreichen möchten, verwenden Sie ** Async ** Http-Clients. Daher erfolgt keine Blockierung, bis Sie die Antwort erhalten. –
@ScaryWombat Lol. Ich wiederhole das! – WowBow