Rumah > Java > teks badan

Mengapa getObject mengambil masa yang lebih lama apabila saiz fail ditetapkan secara dinamik dan disimpan dalam memori dalam aws-sdk-go?

PHPz
Lepaskan: 2024-02-08 22:15:33
ke hadapan
696 orang telah melayarinya

Apabila menggunakan aws-sdk-go untuk operasi fail, kadangkala kita perlu menetapkan saiz fail secara dinamik dan menyimpannya dalam ingatan. Walau bagaimanapun, apabila kami menggunakan kaedah getObject untuk mendapatkan fail ini, kami mungkin mendapati bahawa masa pemerolehan adalah lebih lama. Ini kerana dalam aws-sdk-go, kaedah getObject adalah berdasarkan protokol HTTP, dan protokol HTTP memerlukan lebih banyak masa dan sumber untuk penghantaran fail besar. Oleh itu, apabila kita menetapkan saiz fail secara dinamik dan menyimpannya dalam ingatan, ia boleh menyebabkan masa pelaksanaan kaedah getObject menjadi lebih lama. Untuk mengurangkan kejadian situasi ini, kami boleh mempertimbangkan untuk menggunakan kaedah lain yang lebih sesuai untuk pemindahan fail besar, seperti muat turun bersegmen atau menggunakan muat turun berbilang benang.

Kandungan soalan

Saya cuba memahami ForkJoinPool. Saya sebenarnya tidak faham apa yang perlu dilakukan dalam kes fork 方法在没有 join dan keadaan akhir. Jika fork menghantar tugasan untuk dilaksanakan dalam baris gilir, maka mengapa kod ini tidak berjalan selama-lamanya?

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();
        }
    }
}
Salin selepas log masuk

Hasilnya sentiasa berbeza.

Soalan kedua: Apa yang berlaku jika anda memanggil diri sendiri fork dalam pengiraan?

@Override
protected void compute() {
      System.out.println(1);
      fork();
}
Salin selepas log masuk

Pengiraan akan dipanggil 1 atau 2 kali.

Atau ini:

protected void compute() {
      System.out.println(1);
      fork();
      join();
}
Salin selepas log masuk

Pengiraan akan dipanggil beberapa kali dan kemudian berhenti. . Sediakan gelung tak terhingga yang menghalang utas utama daripada selesai dan anda akan melihat tugas anda diteruskan selama-lamanya.

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();
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa getObject mengambil masa yang lebih lama apabila saiz fail ditetapkan secara dinamik dan disimpan dalam memori dalam aws-sdk-go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan