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.
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(); } } }
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(); }
Pengiraan akan dipanggil 1 atau 2 kali.
Atau ini:
protected void compute() { System.out.println(1); fork(); join(); }
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(); } }
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!