Sobes.tech
Middle

Na czym polega różnica między 'konkurencją' a 'paralelizmem' w kontekście wielowątkowości?

sobes.tech AI

Odpowiedź od AI

Konkurencja (współbieżność) to zdolność systemu do obsługi wielu zadań w tym samym czasie. Zadania te mogą być wykonywane na jednym rdzeniu procesora, przełączając się między nimi w czasie (zasada podziału czasu). Nie musi oznaczać, że zadania są wykonywane w tym samym fizycznym momencie.

Paralelizm (równoległość) to rzeczywiste, jednoczesne wykonywanie wielu zadań w tym samym momencie fizycznym, korzystając z wielu rdzeni procesora lub wielu procesorów.

Główna różnica:

  • Współbieżność: Zarządzanie wieloma zadaniami, które mogą, ale nie muszą, być wykonywane jednocześnie. Skupia się na strukturyzacji programu do obsługi wielu wątków wykonawczych.
  • Równoległość: Fizyczne jednoczesne wykonywanie wielu zadań. Skupia się na wykorzystaniu dostępnych zasobów sprzętowych do przyspieszenia wykonania.
// Przykład współbieżności (bez gwarancji równoległego wykonania)
public class ConcurrentExample {
    public static void main(String[] args) {
        Runnable task1 = () -> System.out.println("Zadanie 1 rozpoczęte na wątku: " + Thread.currentThread().getName());
        Runnable task2 = () -> System.out.println("Zadanie 2 rozpoczęte na wątku: " + Thread.currentThread().getName());

        new Thread(task1).start(); // Mogą być wykonywane na jednym rdzeniu
        new Thread(task2).start(); // Mogą być wykonywane na jednym rdzeniu
    }
}
// Przykład równoległości (wymaga wielordzeniowego procesora)
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() // Używa ForkJoinPool do równoległego wykonania
               .forEach(number -> System.out.println("Przetwarzanie " + number + " na wątku: " + Thread.currentThread().getName()));
    }
}
Aspekt Konkurencja Równoległość
Cel Zarządzanie wieloma zadaniami Przyspieszenie wykonania
Wymagania Wiele zadań/wątków Wielordzeniowy procesor/multiplatformowe procesory
Wykonanie Naprzemienne wykonywanie Równoczesne wykonywanie
Częstotliwość Może być osiągnięta na jednym rdzeniu Wymaga wielu rdzeni/procesorów
Przykład Wielozadaniowość na systemie jednordzeniowym Równoległe przetwarzanie dużych zbiorów danych