Sobes.tech
Middle

Qual è la differenza tra 'concorrenza' e 'parallelismo' nel contesto del multithreading?

sobes.tech AI

Risposta dell'AI

La concorrenza (concurrency) è la capacità di un sistema di elaborare più compiti simultaneamente. Questi compiti possono essere eseguiti su un singolo core del processore, alternandosi nel tempo (principio di divisione del tempo). Non necessariamente significa che i compiti vengano eseguiti nello stesso momento fisico.

Il parallelismo (parallelism) è l'esecuzione reale e simultanea di più compiti in un unico momento fisico, utilizzando più core del processore o più processori.

Differenza principale:

  • Concorrenza: Gestione di più compiti che possono o meno essere eseguiti simultaneamente. Focus sulla strutturazione del programma per gestire più thread di esecuzione.
  • Parallelismo: Esecuzione simultanea fisica di più compiti. Focus sull'utilizzo delle risorse hardware disponibili per accelerare l'esecuzione.
// Esempio di concorrenza (senza garanzia di esecuzione parallela)
public class ConcurrentExample {
    public static void main(String[] args) {
        Runnable task1 = () -> System.out.println("Task 1 avviato sul thread: " + Thread.currentThread().getName());
        Runnable task2 = () -> System.out.println("Task 2 avviato sul thread: " + Thread.currentThread().getName());

        new Thread(task1).start(); // Possono essere eseguiti su un singolo core
        new Thread(task2).start(); // Possono essere eseguiti su un singolo core
    }
}
// Esempio di parallelismo (richiede un processore 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() // Usa ForkJoinPool per esecuzione parallela
               .forEach(number -> System.out.println("Elaborando " + number + " sul thread: " + Thread.currentThread().getName()));
    }
}
Aspetto Concorrenza Parallelismo
Obiettivo Gestione di più compiti Accelerazione dell'esecuzione
Requisiti Più compiti/thread Processore multi-core/multiple processori
Esecuzione Alternanza di esecuzione Esecuzione simultanea
Frequenza Può essere raggiunta su un singolo core Richiede più core/processori
Esempio Multitasking su un sistema a singolo core Elaborazione parallela di grandi set di dati