Bei der Verwendung von aws-sdk-go für Dateivorgänge müssen wir manchmal die Dateigröße dynamisch festlegen und im Speicher speichern. Wenn wir jedoch die getObject-Methode verwenden, um diese Datei abzurufen, kann es sein, dass die Erfassungszeit länger ist. Dies liegt daran, dass in aws-sdk-go die getObject-Methode auf dem HTTP-Protokoll basiert und das HTTP-Protokoll mehr Zeit und Ressourcen für die Übertragung großer Dateien benötigt. Wenn wir die Dateigröße daher dynamisch festlegen und im Speicher speichern, kann dies dazu führen, dass die Ausführungszeit der getObject-Methode länger wird. Um das Auftreten dieser Situation zu reduzieren, können wir die Verwendung anderer Methoden in Betracht ziehen, die für die Übertragung großer Dateien besser geeignet sind, z. B. segmentierte Downloads oder die Verwendung von Multithread-Downloads.
Ich versuche, ForkJoinPool zu verstehen. Ich verstehe eigentlich nicht, was ich im Fall von fork
方法在没有 join
und der Endbedingung tun soll.
Wenn fork
eine Aufgabe zur Ausführung in eine Warteschlange sendet, warum wird dieser Code dann nicht unbegrenzt ausgeführt?
import java.util.concurrent.ForkJoinPool; import java.util.concurrent.RecursiveAction; public class Main { public static void main(String[] args) { ForkJoinPool pool = new ForkJoinPool(); pool.invoke(new Test()); } static class Test extends RecursiveAction { @Override protected void compute() { System.out.println(Thread.currentThread().getName()); Test test = new Test(); test.fork(); } } }
Die Ergebnisse sind immer unterschiedlich.
Zweite Frage: Was passiert, wenn Sie in einer Berechnung self fork
nennen?
@Override protected void compute() { System.out.println(1); fork(); }
Die Berechnung wird 1 oder 2 Mal aufgerufen.
Oder das:
protected void compute() { System.out.println(1); fork(); join(); }
Die Berechnung wird mehrmals aufgerufen und dann gestoppt.
Es läuft unendlich, aber die Daemon-Threads verhindern nicht, dass die JVM heruntergefahren wird, sodass sie heruntergefahren werden, nachdem der Haupt-Thread fertig ist (d. h. sofort). Richten Sie eine Endlosschleife ein, um zu verhindern, dass der Hauptthread abgeschlossen wird, und Sie werden sehen, wie Ihre Aufgabe auf unbestimmte Zeit fortschreitet.
public static void main(String[] args) { ForkJoinPool pool = new ForkJoinPool(); pool.invoke(new Test()); while (true) {} } static class Test extends RecursiveAction { @Override protected void compute() { System.out.println(Thread.currentThread().getName()); Test test = new Test(); test.fork(); } }
Das obige ist der detaillierte Inhalt vonWarum dauert getObject länger, wenn die Dateigröße dynamisch festgelegt und im Speicher in aws-sdk-go gespeichert wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!