Sobes.tech
Junior — Middle

Kaip įgyvendinti daugiagijį apdorojimą dideliam užduočių kiekiui, pavyzdžiui, 10 000 užduočių?

sobes.tech AI

Atsakymas iš AI

Siekiant efektyviai apdoroti didelį užduočių kiekį (pavyzdžiui, 10 000 užduočių) Java kalboje, rekomenduojama naudoti java.util.concurrent išteklių siūlų baseiną.

Pagrindiniai žingsniai:

  1. Sukurkite ExecutorService su fiksuotu arba dinamišku dydžiu.
  2. Siųskite užduotis vykdymui naudodami submit() arba execute().
  3. Laukite, kol visos užduotys bus baigtos, ir tinkamai uždarykite baseiną.

Pavyzdys:

import java.util.concurrent.*;

public class TaskProcessor {
    public static void main(String[] args) throws InterruptedException {
        int numberOfTasks = 10000;
        int poolSize = Runtime.getRuntime().availableProcessors();

        ExecutorService executor = Executors.newFixedThreadPool(poolSize);

        for (int i = 0; i < numberOfTasks; i++) {
            final int taskId = i;
            executor.submit(() -> {
                // Užduoties apdorojimas
                System.out.println("Apdorojama užduotis " + taskId);
                // ...
            });
        }

        executor.shutdown();
        executor.awaitTermination(1, TimeUnit.HOURS);
    }
}

Šis požiūris leidžia efektyviai naudoti CPU išteklius ir valdyti vienu metu vykdomų gijų skaičių, išvengiant pernelyg didelio gijų skaičiaus kūrimo, kuris gali sumažinti našumą.