Sobes.tech
Middle

Care este diferența dintre 'concurență' și 'paralelism' în contextul programării multi-thread?

sobes.tech AI

Răspuns de la AI

Concurența (concurrency) este capacitatea unui sistem de a procesa mai multe sarcini în același timp. Aceste sarcini pot fi executate pe un singur nucleu de procesor, alternând între ele în timp (principiul împărțirii timpului). Nu înseamnă neapărat că sarcinile sunt executate în același moment fizic.

Paralelismul (parallelism) este executarea reală și simultană a mai multor sarcini în același moment fizic, folosind mai multe nuclee de procesor sau mai mulți procesoare.

Diferența principală:

  • Concurența: Gestionarea mai multor sarcini care pot sau nu să fie executate simultan. Se concentrează pe structurarea programului pentru gestionarea mai multor fire de execuție.
  • Parallelismul: Executarea simultană fizică a mai multor sarcini. Se concentrează pe utilizarea resurselor hardware disponibile pentru accelerarea execuției.
// Exemplu de concurență (fără garanția execuției paralele)
public class ConcurrentExample {
    public static void main(String[] args) {
        Runnable task1 = () -> System.out.println("Sarcina 1 început pe firul: " + Thread.currentThread().getName());
        Runnable task2 = () -> System.out.println("Sarcina 2 început pe firul: " + Thread.currentThread().getName());

        new Thread(task1).start(); // Pot fi executate pe același nucleu
        new Thread(task2).start(); // Pot fi executate pe același nucleu
    }
}
// Exemplu de paralelism (necesită un procesor multi-core)
import java.util.List;
import java.util.Arrays;

public class ParallelExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        numbers.parallelStream() // Utilizează ForkJoinPool pentru execuție paralelă
               .forEach(number -> System.out.println("Procesând " + number + " pe fir: " + Thread.currentThread().getName()));
    }
}
Aspect Concurență Paralelism
Scop Gestionarea mai multor sarcini Accelerarea execuției
Cerințe Mai multe sarcini/threads Procesor multi-core/multiple procesoare
Execuție Alternarea execuției Execuție simultană
Frecvență Poate fi atinsă pe un singur nucleu Necesită mai mulți nuclei/procesoare
Exemplu Multitasking pe un sistem cu un singur nucleu Procesarea paralelă a unor seturi mari de date