Heim > Java > Warum dauert getObject länger, wenn die Dateigröße dynamisch festgelegt und im Speicher in aws-sdk-go gespeichert wird?

Warum dauert getObject länger, wenn die Dateigröße dynamisch festgelegt und im Speicher in aws-sdk-go gespeichert wird?

PHPz
Freigeben: 2024-02-08 22:15:33
nach vorne
701 Leute haben es durchsucht

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.

Frageninhalt

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();
        }
    }
}
Nach dem Login kopieren

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();
}
Nach dem Login kopieren

Die Berechnung wird 1 oder 2 Mal aufgerufen.

Oder das:

protected void compute() {
      System.out.println(1);
      fork();
      join();
}
Nach dem Login kopieren

Die Berechnung wird mehrmals aufgerufen und dann gestoppt.

Workaround

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();
    }
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage