Sobes.tech
Junior — Middle

როგორ განვახორციელოთ მრავალმხრივი მუშაობა დიდი რაოდენობის დავალებების, მაგალითად, 10 000 დავალების, დამუშავებისთვის?

sobes.tech AI

პასუხი AI-სგან

Java-да დიდი მოცულობის დავალებების (მაგალითად, 10 000 დავალება) ეფექტურად დამუშავებისთვის რეკომენდირებულია გამოიყენოთ java.util.concurrent-დან თრედების პული.

ძირითადი ნაბიჯები:

  1. შექმენით ExecutorService ფიქსირებული ან დინამიური ზომის პულით.
  2. გაგზავნეთ დავალებები შესრულებისთვის submit() ან execute()-ის საშუალებით.
  3. დაელოდეთ ყველა დავალების დასრულებას და სწორად დახურეთ პული.

მაგალითი:

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(() -> {
                // დავალების დამუშავება
                System.out.println("დავალების დამუშავება " + taskId);
                // ...
            });
        }

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

ეს მიდგომა საშუალებას აძლევს ეფექტურად გამოიყენოს CPU რესურსები და მართოს ერთდროულად შესრულებადი თრედების რაოდენობა, თავიდან აიცილოს ძალიან ბევრი თრედის შექმნა, რაც შეიძლება გამოიწვიოს შესრულების შემცირება.